分组背包问题。
//分组背包问题
#include<stdio.h>
#include<string.h>
#define max(x,y) x<y?y:x
int N,M,A[110][110];
int dp[110];
int main()
{
while(scanf("%d%d",&N,&M)&&( N != 0 || M != 0))
{
memset(dp,0,sizeof(dp));
memset(A,0,sizeof(A));
for(int i = 1; i <= N ; i ++)
for(int j = 1; j <= M ; j ++)
scanf("%d",&A[i][j]);
for(int i = 1; i <= N ; i ++)
for(int v = M; v >= 0; v--)
for(int j = 1; j <= v; j++)//j要小于v
dp[v] = max(dp[v],dp[v-j]+A[i][j]);
printf("%d\n",dp[M]);
}
return 0;
}