正题
题目链接:https://www.luogu.com.cn/problem/P5662
题目大意
有TTT天,nnn个纪念品,每个纪念品每天的价格不同,数量不限。开始小明有mmm块钱,求最后一天的最多钱。
解题思路
因为一个纪念品可以一天卖出并且一天买入,所以我们固定每个买下来的物品第二天一定卖出,那么我们可以设fkf_kfk表示到第iii天剩余价钱为kkk时明天最多可以赚到多少钱,然后就是一个很简单的dpdpdp了。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,m,p[110][11000],f[21000],ans;
int main()
{scanf("%d%d%d",&t,&n,&m);for(int i=1;i<=t;i++)for(int j=1;j<=n;j++)scanf("%d",&p[j][i]);ans=m;for(int i=1;i<t;i++){memset(f,0xcf,sizeof(f));f[ans]=ans;for(int j=1;j<=n;j++)for(int k=ans-p[j][i];k>=0;k--){f[k]=max(f[k],f[k+p[j][i]]+p[j][i+1]-p[j][i]);ans=max(ans,f[k]);}}printf("%d",ans);
}