uva 103 Stacking Boxes(动态规划:矩形嵌套加强)

这个题写了几个小时...

思路是对的,但是代码中排序部分写的不对

思路应该是对每个箱子的维度进行排序,另外还要对所有的箱子排序(我就是错在这里)

不知道杭电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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值