#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背包(分组)
最新推荐文章于 2022-08-07 12:11:36 发布
本文介绍了一个关于分组背包问题的解决方法,通过使用额外的循环处理物品与价值之间的复杂关系,实现对特定条件下最优解的求解。该程序利用 C++ 实现,通过动态规划算法来处理这一经典问题。
4万+

被折叠的 条评论
为什么被折叠?



