#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;
}
hdu 1712ACboy needs your help 01背包(分组)
最新推荐文章于 2020-08-21 20:47:26 发布