题面
分析
其实,很容易想到是个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; }