hdu 1069(dp)
来源:互联网 发布:普通话测试模拟软件 编辑:程序博客网 时间:2024/06/05 20:32
题意 :给你n种方块, 每种方块有n种,你可以任意摆放,如果方块A的长和宽都小于方块B的长和宽,则方块A可以叠在方块B上,求你所能叠起来的最大高度。
题解 :一开始认为是贪心,后面发现貌似不可以。这道题是dp,状态转移方程 :dp[i]=max(dp[i],dp[j]+block[i].h)
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct blocks{ int x,y,z;}block[100005];int dp[100005];bool cmp(const blocks &a,const blocks &b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}int main(){ int n,kase=1; while(cin>>n&&n) { int tot=0; for(int i=0;i<n;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); ///有6种摆放状态。 block[tot].x=a;block[tot].y=b;block[tot++].z=c; block[tot].x=a;block[tot].y=c;block[tot++].z=b; block[tot].x=b;block[tot].y=c;block[tot++].z=a; block[tot].x=b;block[tot].y=a;block[tot++].z=c; block[tot].x=c;block[tot].y=a;block[tot++].z=b; block[tot].x=c;block[tot].y=b;block[tot++].z=a; } sort(block,block+tot,cmp); memset(dp,0,sizeof(dp)); int ans=0; for(int i=0;i<tot;i++) { dp[i]=block[i].z; for(int j=0;j<i;j++) { if(block[i].x>block[j].x&&block[i].y>block[j].y) { dp[i]=max(dp[i],dp[j]+block[i].z); } } ans=max(ans,dp[i]); } cout<<"Case "<<kase++<<": maximum height = "<<ans<<endl; }}
阅读全文
0 0
- HDU 1069 (DP)
- hdu 1069(dp)
- hdu 1069 Monkey and Banana (DP)
- HDU 1069 Monkey and Banana(DP)
- HDU 1069 Monkey and Banana (dp)
- HDU 1069--DP--(摞箱子问题)
- hdu 1069 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana(DP)
- hdu 1069 放长方体 (DP)
- 【HDU 1069】Monkey and Banana(DP)
- 【HDU】1069 - Monkey and Banana(dp)
- HDU 1069 Monkey and Banana(dp)
- HDU 1069 dp
- HDU 1069 DP
- hdu 1069 DP
- HDU 1069 DP
- hdu 1069 dp
- HDU 1069 dp
- Axure RP 8管理团队项目中遇到的问题
- HDU 1242-Rescue
- php培训学习记录 第三天(开始记录)
- web常见错误
- 三维空间透视投影至二维平面
- hdu 1069(dp)
- Jzoj3547 MEX
- define、enum、const
- WPS Office for Linux即将面临开源
- 51Nod 1355 斐波那契的最小公倍数
- 【优先队列】百度2018校招编程题—序列合并
- 1092: 并查集模版
- 提取NTLDR文件,分解Osloader.exe;pe文件找e_lfanew、IMAGE_EXPORT_DIRECTORY->AddressOfFunctions
- Linux系统命令及基本操作