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