例题9-2 UVa 437 (HDU 1069)
来源:互联网 发布:ios10 数据开关 编辑:程序博客网 时间:2024/05/19 21:00
/*基础dpUVa 437 The Tower of BabylonC - Monkey and Banana时间: 2017/02/20题意:叠放立方体,使其叠的高度最大。在按底的长宽排序后,进行求最大子序列和题解:1. 在按底的长宽排序后,进行求最大子序列和2. 类似嵌套问题,记忆化搜索*/#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;#define N 210#define INF 0x3f3f3f3f//1 ------------------------------struct code{ int x,y,z;}f[200];bool cmp(code a,code b){ if(a.x != b.x) return a.x > b.x; return a.y > b.y;}int main(){ int n; int k = 0; while(~scanf("%d",&n)&&n) { k++; int n1 = n; int i = 0; while(n1--) { int a[3]; scanf("%d%d%d",&a[0],&a[1],&a[2]); sort(a,a+3); f[i].y = f[i+1].z = f[i+2].x = a[1]; f[i].x = f[i+1].x = f[i+2].z = a[2]; f[i].z = f[i+1].y = f[i+2].y = a[0]; i += 3; } sort(f,f+3*n,cmp); int dp[200]; int maxn=0; for(i=0;i<3*n;i++) { dp[i] = f[i].z; for(int j = i-1; j >=0; j--) { if(f[j].x > f[i].x && f[j].y > f[i].y) { if(dp[i] < dp[j] + f[i].z) dp[i] = dp[j] + f[i].z; } } if(dp[i] > maxn) maxn = dp[i]; } printf("Case %d: maximum height = %d\n",k,maxn); } return 0;}//2 ------------------------------struct code{ int x,y,z;}f[N];int mp[N][N],dp[N];int n;int dfs(int i){ int &ans = dp[i]; if(ans > 0) return ans; ans = f[i].z; for(int j = 0; j < 3*n; j++) { if(mp[i][j]) ans = max(ans, dfs(j)+f[i].z); } return ans;}int main(){ int k = 0; while(~scanf("%d",&n)&&n) { k++; int n1 = n; int i = 0; while(n1--) { int a[3]; scanf("%d%d%d",&a[0],&a[1],&a[2]); sort(a,a+3); f[i].y = f[i+1].z = f[i+2].x = a[1]; f[i].x = f[i+1].x = f[i+2].z = a[2]; f[i].z = f[i+1].y = f[i+2].y = a[0]; i += 3; } memset(mp,0,sizeof(mp)); memset(dp,0,sizeof(dp)); for(int i = 0; i < 3*n; i++) { for(int j = 0; j < 3*n; j++) { if(f[i].x < f[j].x && f[i].y < f[j].y) mp[i][j] = 1; } } int maxn = 0; for(int i = 0; i < 3*n; i++) { maxn = max(maxn,dfs(i)); } printf("Case %d: maximum height = %d\n",k,maxn); } return 0;}
0 0
- 例题9-2 UVa 437 (HDU 1069)
- 紫书动规 例题9-2 UVA
- UVa #437 The Tower of Babylon (例题9-2)
- 紫书动规 例题9-9 UVA
- 例题9-1 UVa 1025
- 紫书动规 例题9-1 UVA
- 紫书动规 例题9-3 UVA
- 紫书动规 例题9-4 UVA
- 紫书动规 例题9-5 UVA
- 紫书动规 例题9-6 UVA
- 紫书动规 例题9-7 UVA
- 紫书动规 例题9-8 UVA
- 紫书动规 例题9-10 UVA
- 紫书动规 例题9-12 UVA
- 紫书动规 例题9-13 UVA
- 例题9-3 UVa 1347
- UVA 437 例题9-2 巴比伦塔 (DAG上的动态规划)
- 算法竞赛入门经典第九章例题9-2 uva 437 巴比伦塔
- 逻辑地址&线性地址&物理地址
- 深入理解 Java中的 流 (Stream)
- eclipse代码左边虚线对齐设置
- 岭回归和lasso回归的r语言代码
- Android NDK编译本地文件以及引用第三方so文件
- 例题9-2 UVa 437 (HDU 1069)
- KVM切换器五大品牌
- 记一次oracle 监听器 listen故障
- 2017年2月19日偶有所悟
- 人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]
- 记录记录开发过程中用到的技术
- Linux 之父 Linus Torvalds:盲目“创新”不如埋头苦干
- Visual Studio 2010快捷键大全
- 学习