主要还是用到dp的思想进行背包问题的转换 所以必须知道 其状态转移方程实质上是对本身和新增量进行判定
#include<cstdio>
#include<cstring>
#define lar(a,b) a>b?a:b;
int main()
{
int i,j,k,kind,day,M[101][101],V[1000];
while(scanf("%d%d",&kind,&day)!=EOF){
if(kind==0&day==0)break;
memset(V,0,sizeof(V));
for(i=1;i<=kind;i++){
for(j=1;j<=day;j++)scanf(" %d",&M[i][j]);
}
for(i=1;i<=kind;i++){
for(k=day;k>=1;k--){
for(j=1;j<=k;j++){
V[k]=lar(V[k],V[k-j]+M[i][j]);
}
}
}
printf("%d\n",V[day]);
}
return 0;
}
注意的是 在第二层循环和第三层循环之间不能发生调换 否则将引发wa