枚举的时候 用一组的物品去刷新一个重量,有种每组物品只选一次的感觉
dp[k+1][j]=max{dp[k+1][j],dp[k][j],dp[k][j-i]+A[k][i]};
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<vector>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const long long maxn=200;
int n,m;
ll A[maxn][maxn];
ll dp[120][120];
int main()
{
// freopen("D://in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0 && m==0 ) break;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%lld",&A[i][j]);
}
}
memset(dp,0,sizeof(dp));
for(int k=1;k<=n;k++){
for(int j=m;j>=0;j--){
for(int i=1;i<=m;i++){
if(j-i<0){
dp[k+1][j]=max(dp[k][j],dp[k+1][j]);
}else
dp[k+1][j]=max(max(dp[k+1][j],dp[k][j]),dp[k][j-i]+A[k][i]);
}
}
}
printf("%lld\n",dp[n+1][m]);
}
return 0;
}