uva437The Tower of Babylon(不一样的dp)
来源:互联网 发布:linux-mint 搜狗输入法 编辑:程序博客网 时间:2024/06/14 05:55
我的思路和刘汝佳老师的思路不一样:
思路: 把一个立方体变成6个立方体 ,即长宽高都不一样。
定义状态: d[i] 为以下标为i的木块为起点所能摞的最高的高度,记忆化搜索就可以了。
代码(有点长)
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ int a,b,c;}blocks[100];int cnt,n ;int per[5];int v_p[5];int per_p[5];int g[200][200];int d[200];int kase = 1;void dfs(int step){ if(step == 3) { blocks[cnt].a = per[0]; blocks[cnt].b = per[1]; blocks[cnt].c = per[2]; cnt++; return ; } for(int i = 0; i < 3; ++i) { if(!v_p[i]) { per[step] = per_p[i]; v_p[i] = 1; dfs(step + 1); v_p[i] = 0; } }}int dp(int i){ int& ans = d[i]; if(ans > 0) return ans; ans = blocks[i].c ; for(int j = 0;j < 6 * n;++j) if(g[i][j]) ans = max(ans,dp(j) + blocks[i].c); return ans;}int main(){ while(~scanf("%d",&n) && n) { memset(g,0,sizeof(g)); memset(blocks,0,sizeof(blocks)); memset(d,0,sizeof(d)); cnt = 0; for(int i = 0; i < n; ++i) { memset(v_p,0,sizeof(v_p)); scanf("%d%d%d",&per_p[0],&per_p[1],&per_p[2]); dfs(0); } for(int i = 0; i < 6 * n; ++i) { for(int j = 0; j < 6 * n; ++j) { if(i != j) { if((blocks[i].a > blocks[j].a && blocks[i].b > blocks[j].b) || (blocks[i].a > blocks[j].b && blocks[i].b > blocks[j].a)) g[i][j] = 1; else if((blocks[i].a < blocks[j].a && blocks[i].b < blocks[j].b) || (blocks[i].a > blocks[j].b && blocks[i].b > blocks[j].a)) g[j][i] = 1; } } } /*for(int i = 0;i < 6 * n;++i) printf("%d %d %d\n",blocks[i].a,blocks[i].b,blocks[i].c); for(int i = 0;i < 6 * n;++i) { for(int j = 0;j < 6 * n;++j) printf("%d ",g[i][j]); printf("\n"); }*/ int ans; for(int i = 0;i < 6 * n;++i) ans = dp(i); for(int i = 0;i < 6 * n;++i) if(ans < d[i]) ans = d[i]; printf("Case %d: maximum height = %d\n",kase++,ans); } return 0;}
0 0
- uva437The Tower of Babylon(不一样的dp)
- uva 437 The Tower of Babylon(DAG的DP)
- uva437 - The Tower of Babylon(DAG上的DP)
- Uva-437 The Tower of Babylon DP
- UVA 437 The Tower of Babylon | dp
- uva--437The Tower of Babylon+dp
- UVA 437 The Tower of Babylon DP
- uva437 poj2241 The Tower of Babylon dp
- POJ 2241 The Tower of Babylon(dp)
- DP--UVA - 437 The Tower of Babylon
- UVa--437 The Tower of Babylon(dp)
- UVA 437 The Tower of Babylon 【dp】
- uva_437_The Tower of Babylon
- The Tower of Babylon
- UVA_437_The Tower of Babylon
- The Tower of Babylon
- UVA__The Tower of Babylon
- POJ 2241The Tower of Babylon(DAG DP)
- GDAL入门-使用GDAL进行遥感影像NDVI的计算(C++版本)
- Cpp环境【Usaco2007 Jan】【CQYZOJ1432】解题
- HHU 1001: 汽水瓶(模拟)
- poj-2823 Sliding Window(单调队列)
- bzoj1806&&vijos p1386(递推)
- uva437The Tower of Babylon(不一样的dp)
- Elasticsearch的查询器query与过滤器filter的区别
- apache开启https
- Android中关于定制Toast使用总结
- 抓包工具的使用
- Struts2 16个内置验证器
- **浙大PAT甲级 1103 dfs+快速幂
- strcpy函数的用法
- Android studio 生成apk的位置