UVA 264 CD (01背包+输出路径)

来源:互联网 发布:富豪 知乎 编辑:程序博客网 时间:2024/06/05 17:06
UVA    264    CD


典型的01背包+要求输出路径,选的何种背包。敲打新东西:输出路径
#include <cstdio>#include <cstdlib>#include <cstring>const int MAXN = 10010;int dp[MAXN];int time[25];bool f[25][MAXN];int main(){    int w, n;    while (scanf("%d", &w) != EOF)    {        scanf("%d", &n);        memset(dp, 0, sizeof(dp));        memset(f, false, sizeof(f));        for (int i = 1; i <= n; ++i)            scanf("%d", &time[i]);        for (int i = n; i >= 1; --i)            for (int v = w; v >= time[i]; --v)                if (dp[v] < dp[v-time[i]] + time[i])                    dp[v] = dp[v-time[i]] + time[i], f[i][v] = true;   //放入物品时f[i][v]记为真        for (int i = 1, j = w; i <= n; ++i)     //输出路径            if (f[i][j])                printf("%d ", time[i]), j -= time[i];        printf("sum:%d\n", dp[w]);    }    return 0;}


0 0