uva10051 - Tower of Cubes( 简单动归)
来源:互联网 发布:oracle性能监控软件 编辑:程序博客网 时间:2024/05/17 21:39
状态:d[i][j]表示第i个立方体第j个面朝上时塔的最大高度。
状态转移:dp[i][j] = max{dp[k][l]]+1|a[i][j^1]==a[k][l]};
输出路径用一个next数组记录下就可以了。
代码如下:
#include <cstdio>#include <cstring>#define N 505char ans[6][10] = {"front", "back", "left", "right", "top", "bottom"};int n, a[N][6], next[N][6][2], d[N][6], flag;void print_ans(int x, int y, int cur){ if(cur==0) return; printf("%d %s\n", x, ans[y]); print_ans(next[x][y][0],next[x][y][1],cur-1);}int main (){ int cas = 0; while(scanf("%d",&n),n) { for(int i = 1; i <= n; i++) for(int j = 0; j < 6; j++) scanf("%d",&a[i][j]); for(int i = 0; i < 6; i++) d[n][i] = 1; int maxi, maxj, max = 1; for(int i = n-1; i >=1 ; i--) { for(int j = 0; j < 6; j++) { int &ans = d[i][j]; int ansi, ansj; ans = 1; for(int k = n; k > i; k--) for(int l = 0; l < 6; l++) if(a[i][j^1]==a[k][l]&&ans<d[k][l]+1) { ans = d[k][l]+1; ansi = k; ansj = l; } next[i][j][0] = ansi; next[i][j][1] = ansj; if(max<d[i][j]) { max = d[i][j]; maxi = i; maxj = j; } } } flag = max; if(cas) printf("\n"); printf("Case #%d\n%d\n",++cas,max); print_ans(maxi,maxj,max); } return 0;}
- uva10051 - Tower of Cubes( 简单动归)
- UVA10051 Tower of Cubes
- UVA10051- - Tower of Cubes
- 10051 - Tower of Cubes----------
- 10051 - Tower of Cubes
- Tower of Cubes UVA
- UVa 10051 Tower of Cubes DP 简单动态规划题
- Tower of Cubes+uva+简单dp(LIS)
- uva 10051 Tower of Cubes
- UVa 10051. Tower of Cubes
- uva_10051 - Tower of Cubes(LIS)
- UVA 10051 Tower of Cubes
- uva 10051 Tower of Cubes
- UVa 10051 - Tower of Cubes
- UVA - 10051 Tower of Cubes
- uva 10051 Tower of Cubes
- uva 10051 - Tower of Cubes
- UVA - 10051 Tower of Cubes
- 上下左右箭头的ASCII值
- 云存储的结构模型
- 第三方应用分享到微信朋友圈功能
- WIN7系统设置WIFI热点
- db2 userid 为空
- uva10051 - Tower of Cubes( 简单动归)
- 百度实习面试
- hdu 1059
- Ubuntu下忘记MySQL密码重设方法
- 学习OpenCV:滤镜系列(8)——素描
- 多个blocksize 表空间的设置
- 重新学习ASP.NET(一)ASP.NET简介
- 程序员版--致青春(一)——facejoking刷票工具(谈刷票原理)
- Android开发_修改listview中信息