uva 103 Stacking Boxes(动态规划:矩形嵌套加强)
来源:互联网 发布:开设大数据专业的学校 编辑:程序博客网 时间:2024/06/06 18:04
这个题写了几个小时...
思路是对的,但是代码中排序部分写的不对
思路应该是对每个箱子的维度进行排序,另外还要对所有的箱子排序(我就是错在这里)
不知道杭电1614是什么问题,感觉是抽了
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 32 using namespace std;int n, k;int dp[MAXN], s[MAXN];struct Array { int index; int a[12];}array[MAXN]; bool judge(int i, int j) { for(int t=0; t<n; ++t) { if(array[i].a[t] >= array[j].a[t]) return false; } return true;}bool cmp(Array c, Array d) {//这个排序方法一定要注意 for(int i=0; i<n; ++i) { if(c.a[i] > d.a[i]) return false; } return true;}void dfs(int i) { if(s[i] != i) dfs(s[i]); printf("%d ", array[i].index);}int main(void) { while(~scanf("%d%d", &k, &n)) { for(int i=0; i<k; ++i) { for(int j=0; j<n; ++j) { scanf("%d", &array[i].a[j]); } array[i].index = i+1; sort(array[i].a, array[i].a+n); dp[i] = 1; s[i] = i; } sort(array, array+k, cmp); s[0] = 0; int ans = 1; int pos = 0; for(int i=1; i<k; ++i) { for(int j=0; j<i; ++j) { if(judge(j, i) && dp[i]<dp[j]+1) { dp[i] = dp[j]+1; s[i] = j; } } //printf("dp[%d] = %d\n", i, dp[i]); if(ans < dp[i]) { ans = dp[i]; pos = i; } } printf("%d\n", ans); dfs(pos); puts(""); } return 0;}
0 0
- uva 103 Stacking Boxes(动态规划:矩形嵌套加强)
- UVA - 103 - Stacking Boxes (动态规划)
- Uva 103-Stacking Boxes(DP/矩形嵌套)
- uva 103 Stacking Boxes 动态规划
- UVA 103 Stacking Boxes (DAG上的动态规划)
- UVa 103 Stacking Boxes
- UVA 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- uva 103 Stacking Boxes
- [UVA 103] Stacking Boxes
- uva:103 - Stacking Boxes
- UVa 103 - Stacking Boxes
- UVA - 103 Stacking Boxes
- uva 103 - Stacking Boxes
- UVA 103 Stacking Boxes
- UVa 103 - Stacking Boxes
- Uva - 103 - Stacking Boxes
- uva 103 - Stacking Boxes
- IOS_多线程
- MAVEN项目标准目录结构
- JVMTI开发教程之一个简单的Agent
- Android学习四、Android中的Adapter
- 黑马程序员24——OC之内存管理(循环引用)
- uva 103 Stacking Boxes(动态规划:矩形嵌套加强)
- 开源夏令营第八周--添加SettingsActivity和手势密码
- Property Graph Model
- J2SE基础:12.IO流编程
- 设计模式专题
- JDBC的几个常用对象
- 为Android开发者定制的搜索引擎
- PAT (Advanced) 1017. Queueing at Bank (25)
- 自旋锁、排队自旋锁、MCS锁、CLH锁