#include<iostream>
using namespace std;
int a[110][110];
int dp[110];
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,m,i,j,k;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
memset(dp,0,sizeof(dp));
//输入部分
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
//dp[m],m表示天数。k应该是每一次减少的天数
//这个问题是从底层开始的,就是m天一天一天的减少
//dp[m]是会改变的。
for(i=1;i<=n;i++)
for(j=m;j>=0;j--)
for(k=1;k<=m;k++)
if(j>=k)
{
//只有两种情况,选择(dp[j]+a[i][k])或者不选择(dp[j])
//a[i][k]表示选择对i学科花费k天的收益
dp[j]=max(dp[j],dp[j-k]+a[i][k]);
}
cout<<dp[m]<<endl;
}
return 0;
}
//其实这种方法截取方式跟记忆式的不同,记忆氏的方法是纵向的,一下到底。
//这种方法是一层一层的拨开。
hdoj 1712
最新推荐文章于 2019-10-14 09:38:31 发布