hdu1712
分析
就是分组背包中的至多选一个的情况,如果用二维的话,就是先继承上一组,达到不选,在对组内更新,选一次,初始化为0.
问题
http://acm.hdu.edu.cn/showproblem.php?pid=1712
代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dp[110][110];
int matix[110][110];
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF&&(n!=0&&m!=0))
{
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%d",&matix[i][j]);
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
{
for(int k=m; k>=1; k--)
{
dp[i][k]=dp[i-1][k];
}
for(int k=m; k>=1; k--)
{
for(int j=1; j<=k; j++)
{
dp[i][k]=max(dp[i][k],dp[i-1][k-j]+matix[i][j]);
}
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}