hdu 1712ACboy needs your help 01背包(分组)

来源:互联网 发布:网络云盘哪个最好用 编辑:程序博客网 时间:2024/05/16 19:12
#include <iostream>#include <cstring>#include <cstdio>using namespace std;/*本题的难点是, 物品和价值不易分离, 需要外加一层循环处理天数和价值间的关系;*/int main(){    int dp[105];    int value[105][105];    int n, m;    while(scanf("%d%d", &n, &m) != EOF && m != 0 && n != 0) {        for(int i = 1; i <= n; i++) {            for(int j = 1; j <= m; j++) {                scanf("%d", &value[i][j]);            }        }        memset(dp, 0, sizeof(dp));        for(int i = 1; i <= n; i++) {   //分组背包问题;            for(int j = m; j >= 1; j--) {                for(int k = 1; k <= j; k++) {  //天数为j天时, 取得从第一天到j天, 所有可能组成的最优解;                    dp[j] = max(dp[j], dp[j - k] + value[i][k]);                }            }        }        printf("%d\n", dp[m]);    }    return 0;}

0 0
原创粉丝点击