码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1069 Monkey and Banana (动态规划)

时间:2019-11-28 19:06:15      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:高度   思路   include   std   规划   long   acm   def   简单   

 

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069

简单记录一下

思路:把长方体的各种摆法都存到数组里面,然后按照长宽排序,再dp即可

转移方程 dp[i]=max(dp[i],dp[t]+a[i].z)  //dp里存的是高度,a[i].z是第i个的高度

 

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <string>
 6 #include <stack>
 7 #include <queue>
 8 #include <cmath>
 9 #define ll long long
10 #define pi 3.1415927
11 #define inf 0x3f3f3f3f
12 using namespace std;
13 struct node {
14     int x,y,z;
15 }a[200];
16 bool cmp (node x, node y)
17 {
18     if (x.x==y.x)
19         return x.y<y.y;
20     return x.x<y.x;
21 }
22 int dp[200];
23 int main ()
24 {
25     int n,m,i,t,sum,j=0,k;
26     while(cin>>n)
27     {
28         j++;
29         if(n==0)
30             break;
31         k=0;
32         for(i=0;i<n;++i)
33         {
34             int x,y,z;
35             cin>>x>>y>>z;
36             if(x==y==z)
37                 a[k].x=x, a[k].y=y, a[k++].z=z;
38             else if (x==y)
39                 a[k].x=x, a[k].y=y, a[k++].z=z,
40                 a[k].x=x, a[k].y=z, a[k++].z=y,
41                 a[k].x=z, a[k].y=x, a[k++].z=y;
42             else if (x==z)
43                 a[k].x=x, a[k].y=y, a[k++].z=z,
44                 a[k].x=x, a[k].y=z, a[k++].z=y,
45                 a[k].x=y, a[k].y=x, a[k++].z=z;
46             else if (y==z)
47                 a[k].x=x, a[k].y=y, a[k++].z=z,
48                 a[k].x=z, a[k].y=y, a[k++].z=x,
49                 a[k].x=y, a[k].y=x, a[k++].z=z;
50             else
51                 a[k].x=x, a[k].y=y, a[k++].z=z,
52                 a[k].x=x, a[k].y=z, a[k++].z=y,
53                 a[k].x=y, a[k].y=x, a[k++].z=z,
54                 a[k].x=y, a[k].y=z, a[k++].z=x,
55                 a[k].x=z, a[k].y=y, a[k++].z=x,
56                 a[k].x=z, a[k].y=x, a[k++].z=y;
57         }
58         sort(a,a+k,cmp);
59         for(i=0;i<k;++i)
60             dp[i]=a[i].z;
61         int maxs=0;
62         for(i=1;i<k;++i)
63             for(t=0;t<i;++t)
64         {
65             if(a[i].x>a[t].x &&a[i].y>a[t].y){
66                 dp[i]=max(dp[i],dp[t]+a[i].z);
67                 maxs=max(maxs,dp[i]);
68             }
69         }
70         cout<<"Case "<<j<<": maximum height = "<<maxs<<endl;
71     }
72 
73 
74     return 0;
75 }

 

HDU 1069 Monkey and Banana (动态规划)

标签:高度   思路   include   std   规划   long   acm   def   简单   

原文地址:https://www.cnblogs.com/blowhail/p/11951861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!