hdu 1069 DP
来源:互联网 发布:中学生网络交友受骗 编辑:程序博客网 时间:2024/06/05 21:22
做的很艰难,还参考了一下别人的。。。。。
子问题是以每个矩形为底的塔的最大高度,所有子问题的解中最大的一个就是原问题的解,其中以某个矩形为底的塔的高度可以由自身高度加上可以放在其上的塔的最大高度得到
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n;typedef struct{int xi;int yi;int zi;int base; //底面面积}block;int compare(const void *a,const void *b) //根据底面面积排序{return (*(block*)a).base - (*(block*)b).base;}int x,y,z;int main(){int count = 0;while(cin>>n){count++;if(n == 0)break;block *blocks = new block[3*n+1];int *Height = new int[3*n+1];int cnt = 1;for(int j = 1; j <= n; j++) //根据高不同扩展出三种砖头{cin>>x>>y>>z;blocks[3*j-2].base = x*y;blocks[3*j-2].xi = x;blocks[3*j-2].yi = y;blocks[3*j-2].zi = z;blocks[3*j-1].base = x*z;blocks[3*j-1].xi = z;blocks[3*j-1].yi = x;blocks[3*j-1].zi = y;blocks[3*j].base = y*z;blocks[3*j].xi = y;blocks[3*j].yi = z;blocks[3*j].zi = x;}qsort(blocks+1,3*n,sizeof(block),compare);Height[1] = blocks[1].zi;int maxminum = 0; //存放最大值for(int i = 2; i <= 3*n; i++) //对于每一种底面{bool find = false;//是否能找到放在当前平面上的砖头int maxHeight = 0;for(int j = i-1;j >= 1; j--)//寻找能放在上面的砖头{if(blocks[i].xi > blocks[j].xi && blocks[i].yi > blocks[j].yi ||blocks[i].xi > blocks[j].yi && blocks[i].yi > blocks[j].xi){if(Height[j] > maxHeight){maxHeight = Height[j];find = true;}}}if(find == true){Height[i] = maxHeight + blocks[i].zi; }else{Height[i] = blocks[i].zi;}if(maxminum < Height[i]){maxminum = Height[i];}}cout<<"Case "<<count<<": maximum height = "<<maxminum<<endl;}return 0;}
- HDU 1069 dp
- HDU 1069 DP
- hdu 1069 DP
- HDU 1069 DP
- hdu 1069 dp
- HDU 1069 dp
- hdu 1069 dp
- HDU 1069 (DP)
- HDU 1069 DP 经典
- hdu 1069 (dp)
- DP HDU-1069
- #HDU 1069 简单dp
- HDU 1069 dp??
- hdu 1069(dp)
- HDU 1069 DP
- hdu 1069 dp
- [DP] HDU 1069
- HDU DP
- Ubuntu下使用mentofust配置上网
- 反射——总结一
- SQL Server 存储过程
- linux GCC GDB make 编程及命令
- 双向链表的插入删除和查询
- hdu 1069 DP
- ASCII
- 高清智能安防系统旅游景区解决方案分析
- Global.asax.cs中的方法的含义
- CDN(内容分发网络)技术原理
- 从谷歌宕机事件认识互联网工作原理
- 高仿launcher和墨迹左右拖动效果
- [130317]上色练习-黑兔
- 技术普及帖:你刚才在淘宝上买了一件东西