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

hdu 4001 dp

时间:2015-02-11 16:28:03      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

题意:给一些指定长宽高的砖,求能累出的最大高度,不同砖有不同编号,每种编号对下面的砖做出了限制

dp

注意输出要用%I64d,否则会wa,以后不用%lld了

Sample Input

3
10 10 12 0
10 10 12 1
10 10 11 2
2
10 10 11 1
10 10 11 1
0
Sample Output
24
11
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 int n,m,t;
 9 const int maxn=1005;
10 __int64 dp[maxn];
11 struct node
12 {
13     int l,w,d,c;
14 }a[maxn];
15 bool cmp(node a,node b)
16 {
17     if(a.l!=b.l)    return a.l<b.l;
18     if(a.w!=b.w)    return a.w<b.w;
19     return a.d>b.d;
20 }
21 int main()
22 {
23     int i,j,k;
24     while(scanf("%d",&n)!=EOF&&n)
25     {
26         for(i=1;i<=n;i++)
27         {
28             scanf("%d%d%d%d",&a[i].l,&a[i].w,&a[i].c,&a[i].d);  //长宽高
29             if(a[i].l<a[i].w)   swap(a[i].l,a[i].w);
30         }
31         sort(a+1,a+n+1,cmp);
32         __int64 ans=0;
33         for(i=1;i<=n;i++)
34         {
35             dp[i]=a[i].c;
36             for(j=1;j<i;j++)
37             {
38                 if(a[i].d==0&&a[i].w>=a[j].w&&a[i].l>=a[j].l)
39                 {
40                     dp[i]=max(dp[i],dp[j]+a[i].c);
41                 }
42                 if(a[i].d==1&&a[i].w>=a[j].w&&a[i].l>=a[j].l&&(a[i].w>a[j].w||a[i].l>a[j].l))
43                 {
44                     dp[i]=max(dp[i],dp[j]+a[i].c);
45                 }
46                 if(a[i].d==2&&a[i].w>a[j].w&&a[i].l>a[j].l)
47                 {
48                     dp[i]=max(dp[i],dp[j]+a[i].c);
49                 }
50             }
51             if(dp[i]>ans)   ans=dp[i];
52         }
53         printf("%I64d\n",ans);
54     }
55     return 0;
56 }

 

hdu 4001 dp

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4286292.html

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