hdu 1069 최장 상승자 서열 변형
8333 단어 HDU
그런 다음 사각형 중첩처럼 해답을 구한다. 단지 상태 이동 방정식은 다음과 같다.
dp[i] = max( dp[i], dp[j] + z[i] );
코드는 다음과 같습니다.
1 #include <algorithm>
2 #include <cstdio>
3 using namespace std;
4
5 const int N = 100;
6 int dp[N];
7
8 struct Node
9 {
10 int x, y, z;
11 bool operator < ( const Node & o ) const
12 {
13 if ( x != o.x ) return x < o.x;
14 return y < o.y;
15 }
16 Node(){}
17 Node( int _x, int _y, int _z )
18 {
19 x = _x, y = _y, z = _z;
20 }
21 void standard()
22 {
23 if ( x > y ) swap( x, y );
24 }
25 } node[N];
26
27 int main ()
28 {
29 int n, _case = 1;
30 while ( scanf("%d", &n), n )
31 {
32 for ( int i = 0; i < n; i++ )
33 {
34 int x, y, z;
35 scanf("%d%d%d", &x, &y, &z);
36 node[i * 3] = Node( x, y, z );
37 node[i * 3].standard();
38 node[i * 3 + 1] = Node( x, z, y );
39 node[i * 3 + 1].standard();
40 node[i * 3 + 2] = Node( y, z, x );
41 node[i * 3 + 2].standard();
42 }
43 sort( node, node + 3 * n );
44 int ans = -1;
45 for ( int i = 0; i < 3 * n; i++ )
46 {
47 dp[i] = node[i].z;
48 for ( int j = 0; j < i; j++ )
49 {
50 if ( node[j].x < node[i].x && node[j].y < node[i].y )
51 {
52 dp[i] = max( dp[i], dp[j] + node[i].z );
53 }
54 }
55 ans = max( ans, dp[i] );
56 }
57 printf("Case %d: maximum height = %d
", _case++, ans);
58 }
59 return 0;
60 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu4671(다교리그 7--수 시뮬레이션)클릭하여 링크 열기 제목: n과 서버, m개의 데이터베이스가 있고 모든 데이터베이스는 서버를 연결해야 하지만 모든 데이터베이스는 서버를 연결하는 우선순위가 있습니다.모든 데이터베이스의 서버 우선순위를 구하다.또한 한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.