UVA103 (DP)
2014-10-12 13:51
127 查看
这题是嵌套矩阵的的变形.
有n个箱子,问最多能有几个嵌套在一起,箱子是d维的.
两个箱子要嵌套在一起的条件的每一维的长度都比另一个箱子小..(所以要先把所有维的长度排序,最小的和最小的比,就像长5宽2的矩形可以放进长3宽7的矩形一样,因为能转.)
然后根据嵌套关系构图,如果第i个能嵌进第j个,那么g[i][j] = 1;
然后就是要找最大路径,
这个算法可以直接用刘汝佳书上的模板,构图做好了,就和矩形嵌套是一模一样的题目了.
有n个箱子,问最多能有几个嵌套在一起,箱子是d维的.
两个箱子要嵌套在一起的条件的每一维的长度都比另一个箱子小..(所以要先把所有维的长度排序,最小的和最小的比,就像长5宽2的矩形可以放进长3宽7的矩形一样,因为能转.)
然后根据嵌套关系构图,如果第i个能嵌进第j个,那么g[i][j] = 1;
然后就是要找最大路径,
这个算法可以直接用刘汝佳书上的模板,构图做好了,就和矩形嵌套是一模一样的题目了.
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int N = 30 + 5; const int M = 10 + 5; int g ; int box [M]; int num ; int n; int d; int w; int dp(int i) { if (num[i] > 0) return num[i]; num[i] = 1; for (int j = 0 ; j < n;j++) { if (g[i][j]) { num[i] = num[i] > dp(j) + 1 ? num[i] : dp(j) + 1; } } return num[i]; } void print(int i) { if (!w) printf("%d",i + 1); else printf(" %d",i + 1); w++; for (int j = 0 ; j < n ;j++) { if (g[i][j] && num[i] == num[j] + 1) { print(j); break; } } } int main () { while(~scanf("%d%d",&n,&d)) { memset(g , 0 , sizeof(g)); memset(box , 0 , sizeof(box)); memset(num , 0 ,sizeof(num)); for (int i = 0 ; i < n ;i++) { for (int j = 0 ; j < d ;j++) { scanf("%d",&box[i][j]); } sort(box[i],box[i] + d); } bool ok = true; for (int i = 0 ; i < n ; i++) { for(int j = 0 ; j < n ;j++) { ok = true; for (int k = 0; k < d ;k++) { if (box[i][k] >= box[j][k]) { ok = false; } } if (ok) { g[i][j] = 1; } } } for (int i = 0 ; i < n ;i++) { dp(i); } int m = 0; int res; for (int i = 0 ;i < n ;i++) { if (num[i] > m) { m = num[i]; res = i; } } printf("%d\n",m); w = 0; print(res); printf("\n"); } }
相关文章推荐
- UVa 103 Stacking Boxes 堆砌盒子(DP 最长条件子序列)
- 【DP】UVA 103 Stacking Boxes 输出路径
- 【DP】UVA 103 Stacking Boxes 输出路径
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- uva 103 (dp)Stacking Boxes
- UVa 103 - Stacking Boxes(dp求解)
- UVa 103 Stacking Boxes (DP&DAG)
- UVA 103 Stacking Boxes 堆砌盒子(DP)
- Stacking Boxes - UVa 103 dp
- DP-DAG uva_103 Stacking Boxes
- UVA 103 Stacking Boxes (DP)
- UVA_103 Stacking boxes(DP)
- uva103Stacking Boxes——dp
- DP 练习 uva103 Stacking Boxs
- UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)
- Uva 103-Stacking Boxes(DP/矩形嵌套)
- 【解题报告】uva103_Stacking Boxes(堆砌盒子, dp)
- UVa 10130 SuperSale(DP_01背包)
- UVa 10465 Homer Simpson(DP完全背包)
- UVa11552 - Fewest Flops(dp)