UVA - 10051 Tower of Cubes DAG最长路径
2014-11-14 10:55
387 查看
题目大意:给出N个正方体,正方体的重量由轻到重,轻的必须放在重的上面,而且上面的那一个正方体的底部颜色必须与其下面的那一块的顶部颜色相同,求最多能叠几个正方体,并输出堆叠时正方体上面的颜色
解题思路:用dp[i][j]表示第i个j面朝上时能堆叠几个,那么就可以得到转换方程了,dp[i][j]=max(dp[k][l])+1,dp[k][l]转换时的判断条件要注意,如果j面朝上的话,那么他的相反面就必须和k的l面的颜色相同
解题思路:用dp[i][j]表示第i个j面朝上时能堆叠几个,那么就可以得到转换方程了,dp[i][j]=max(dp[k][l])+1,dp[k][l]转换时的判断条件要注意,如果j面朝上的话,那么他的相反面就必须和k的l面的颜色相同
#include<cstdio> #include<cstring> #define maxn 505 int cube[maxn][6],N,dp[maxn][6],path[maxn][6][2]; char color[6][10] = {"front","back","left","right","top","bottom"}; int main() { int mark = 1,bo = 1; while(scanf("%d", &N) != EOF && N) { if(bo) bo = 0; else printf("\n"); memset(dp,0,sizeof(dp)); for(int i = 1; i <= N; i++) scanf("%d%d%d%d%d%d",&cube[i][0],&cube[i][1],&cube[i][2],&cube[i][3],&cube[i][4],&cube[i][5]); printf("Case #%d\n",mark++); int max = 0,first[2]; for(int i = N; i >= 1; i--) for(int j = N; j > i; j--) for(int k = 0; k < 6; k++) for(int l = 0; l < 6; l++) if(cube[i][k] == cube[j][l]) {//如果第I个的下面的颜色等于第J个的上面的的颜色 int temp1; if(k % 2 == 0) temp1=k+1; else temp1=k-1; int temp3 = dp[j][l] + 1; if(dp[i][temp1] < temp3) { dp[i][temp1] = temp3; path[i][temp1][0] = j; path[i][temp1][1] = l; if(max < dp[i][temp1]) { max = dp[i][temp1]; first[0] = i; first[1]= temp1; } } } printf("%d\n",max+1); int m,n; for(int i = first[0],j = first[1],k = 1; k <= N; k++, m = path[i][j][0],n = path[i][j][1],i = m,j = n) { if(i != 0) { printf("%d %s\n",i,color[j]); } } } return 0; }
相关文章推荐
- UVA 10051 - Tower of Cubes(dp + DAG最长路径)
- UVA 10051 - Tower of Cubes(dp + DAG最长路径)
- uva 10051 Tower of Cubes
- uva 10051 Tower of Cubes
- UVA 10051 Tower of Cubes
- UVA 437 The Tower of Babylon (dp + DAG最长序列)
- UVa 10051 - Tower of Cubes
- UVA 10051 --Tower of Cubes +dp
- uva 10051 Tower of Cubes
- uvaoj 10051 Tower of Cubes 最长上升子序列 记录路径
- UVa 10285 最长的滑雪路径(DAG上的最长路)
- uva 437 The Tower of Babylon (DAG)
- The Tower of Babylon UVA - 437 (DAG上的动态规划变形,记忆化搜索)
- UVA_437_The_Tower_of_the_Babylon_(DAG上动态规划/记忆化搜索)
- uva 103 Stacking Boxes(DAG上的最长路径)
- UVA 437 The Tower of Babylon(最长上升子序列)
- uva 437 The Tower of Babylon(DAG的DP)
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- UVa 10051 Tower of Cubes(DP 最长序列)
- UVA 437 - The Tower of Babylon (DAG)