uva 624 CD

来源:互联网 发布:kmv 知乎 编辑:程序博客网 时间:2024/06/05 13:31
/******************** * Author:fisty * Data:2014-10-31 * uva624 * 01背包 * *****************/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX_N 100 int w[MAX_N];int dp[MAX_N];int main(){        int W;        while(~scanf("%d", &W)){                int t;                int vis[MAX_N][30];                memset(dp, 0, sizeof(dp));                memset(vis, 0, sizeof(vis));                scanf("%d", &t);                for(int i = 0;i < t; i++){                        scanf("%d", &w[i]);                }                //0-1背包                for(int i = 0;i < t; i++){                        for(int j = W; j >= w[i]; j--){                                if(dp[j] <= dp[j-w[i]]+w[i]){                                        dp[j] = dp[j-w[i]] + w[i];                                        vis[j][i] = 1;                                        //printf("j : %d i : %d \n", j,i);                                }                                                               }                }                //输出                for(int i = t -1, j = W; i >= 0; i--){                        if(vis[j][i]){                                printf("%d ", w[i]);                                //printf("j : %d \n", j);                                j -= w[i];                                                      }                }                printf("sum :%d\n", dp[W]);        }        return 0;}

0 0