其实,很容易想到是个DP啊
按每天来算,是N套完全背包,石头种类是种数,到前一天为止所得的钱是容量,物品两天的差价是价值
#include<bits/stdc++.h>
using namespace std;
#define N 5001
int n,d,m;
int f[500003],price[60][30];
int main()
{
scanf("%d%d%d",&n,&d,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=d;j++)
scanf("%d",&price[i][j]);
for(int k=1;k<d;k++)
{
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
int v=price[i][k+1]-price[i][k];
for(int j=price[i][k];j<=m;j++)
f[j]=max(f[j],f[j-price[i][k]]+v);
}
m+=f[m];
}
printf("%d",m);
return 0;
}