ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
2011-09-03 22:25
435 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4001
本文作者:kuangbin @SHU
作者博客:www.cnblogs.com/kuangbin
转载请注明出处。THX
题意:
小孩子玩积木堆房子的情景:
每组测试数据第一行给出n,代表接下来有n块砖;
接下来n行,每行给出砖的长,宽,高,属性(a,b,c,d);
属性d:d=0:该砖的长度和宽度(a,b)要比垫在他下面的砖的长,宽大或者相等;就是长>=长,宽>=宽
d=1:改砖的宽度和长度要比下面的砖的长度大或者相等,同时,该砖的宽度值和面积值要比下面的砖的面积值大;即长>=长,宽>=宽,面积>面积。也就是长>=长&&宽>=宽&&(长>长||宽>宽)
d=2:该砖的长度和宽度(a,b)要比垫在他下面的砖的长,宽大(严格大于);长>长,宽>宽。
要求输出该给出的所有的砖块所能听堆砌的最大高度。
比赛时没有想到,看了同校的大牛做出来的代码之后恍然大悟。原来按照长、宽排一下序,然后DP解决。
代码很清楚简洁了。。看代码吧!
看代码:
本文作者:kuangbin @SHU
作者博客:www.cnblogs.com/kuangbin
转载请注明出处。THX
题意:
小孩子玩积木堆房子的情景:
每组测试数据第一行给出n,代表接下来有n块砖;
接下来n行,每行给出砖的长,宽,高,属性(a,b,c,d);
属性d:d=0:该砖的长度和宽度(a,b)要比垫在他下面的砖的长,宽大或者相等;就是长>=长,宽>=宽
d=1:改砖的宽度和长度要比下面的砖的长度大或者相等,同时,该砖的宽度值和面积值要比下面的砖的面积值大;即长>=长,宽>=宽,面积>面积。也就是长>=长&&宽>=宽&&(长>长||宽>宽)
d=2:该砖的长度和宽度(a,b)要比垫在他下面的砖的长,宽大(严格大于);长>长,宽>宽。
要求输出该给出的所有的砖块所能听堆砌的最大高度。
比赛时没有想到,看了同校的大牛做出来的代码之后恍然大悟。原来按照长、宽排一下序,然后DP解决。
代码很清楚简洁了。。看代码吧!
看代码:
#include <iostream> #include <algorithm> using namespace std; struct rec { int l,w,c,d; }d[1100]; int cmp(const void *a,const void *b)//先按长再按宽从小到大排序 { rec t1,t2; t1 = *(rec *)a; t2 = *(rec *)b; if(t1.l != t2.l)return t1.l - t2.l; if(t1.w != t2.w)return t1.w - t2.w; return t2.d - t1.d; } int n ; long long f[1100],ans; int main() { while(~scanf("%d",&n)&&n) { for(int i = 1;i <= n; i ++) { scanf("%d %d %d %d",&d[i].l,&d[i].w,&d[i].c,&d[i].d); if(d[i].l<d[i].w)swap(d[i].l,d[i].w); } qsort(&d[1],n,sizeof(d[1]),cmp); ans = 0 ; for(int i = 1;i <= n; i ++)//DP { f[i] = d[i].c; for(int j = 1; j < i ; j ++) { if(d[i].d == 0 && d[i].w >= d[j].w && d[i].l >= d[j].l) { f[i] = max(f[i],f[j]+d[i].c); } if(d[i].d == 1 && d[i].w >= d[j].w && d[i].l >= d[j].l && (d[i].w > d[j].w || d[i].l > d[j].l))//ok { f[i] = max(f[i],f[j]+d[i].c); } if(d[i].d == 2 && d[i].w > d[j].w && d[i].l > d[j].l)//ok { f[i] = max(f[i],f[j]+d[i].c); } } if(f[i] > ans)ans = f[i]; } cout << ans << endl; } return 0; }
相关文章推荐
- HDU/HDOJ 4004 2011大连赛区网络赛 D题
- 2011 ACM/ICPC 福州赛区网络赛解题报告
- 2011-第36届ACM/ICPC亚洲区中国大陆5个赛区主办方网络赛和现场赛时间安排
- 2011 ACM/ICPC 大连赛区现场赛题解:Compress the String
- ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
- 有向图的最小生成树(最小树形图)hdu4009 2011大连赛区网络赛1009
- HDU/HDOJ 4002 2011大连赛区网络赛 数论
- 2011 大连网络赛 The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest 解题报告
- 2011大连赛区网络赛 HDOJ
- Hdu 4035 Maze (dp求期望) - 2011 ACM/ICPC 成都赛区网络预选赛 1005
- hdu 5869 Different GCD Subarray Query 2016ACM/ICPC大连赛区网络赛1002
- hdu 5869 Different GCD Subarray Query 2016ACM/ICPC大连赛区网络赛1006
- Random Sequence 2011ACM福州赛区网络赛
- hdu 5875 Function 2016ACM/ICPC大连赛区网络赛1008
- HDU 4004 - The Frog\'s Games 第36届ACM/ICPC亚洲大连赛区网络赛
- hdu 4001 (2011ACM/ICPC大连网络赛)
- hdu 4002 欧拉函数 2011大连赛区网络赛B
- hdu 4004 二分 2011大连赛区网络赛D
- Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 F. Periodic Signal(FFT 优化乘法)