P5662 [CSP-J2019] 纪念品

》》》n个纪念品 t天 每天一个价 可以以买卖 最多能卖多少钱

>>>当日购买的纪念品也可以当日卖出换回金币”!一个纪念品,你想连续持有若干天,可以看做第一天买,第二天早上立刻卖掉,然后第二天买回来,第三天早上立刻卖掉,然后第三天买回来……

》》》今天买 明天就卖 明天继续决策 pr[i+1][]-pr[i][]

:::从后往前遍历  可以多次买卖

#include<cstdio>
#include<iostream>
#include<algorithm>
//#include<queue>
//#include<vector>
//#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------------\n");
using namespace std;
const int maxn=2e2+10;

int t,n,m,price[maxn][maxn],dp[10005],ans;
//dp[maxn]
int main()
{
    ios::sync_with_stdio(false);
    cin>>t>>n>>m;
    for(int i=1;i<=t;i++){
        for(int j=1;j<=n;j++)
            cin>>price[i][j];
    }
    ans=m;
    for(int i=1;i<t;i++){
        for(int j=0;j<=2e2;j++) dp[j]=-0x3f3f3f3f;
        //memset(dp,-0x3f3f3f3f,sizeof(dp));
        dp[ans]=ans;
        for(int j=1;j<=n;j++){
            for(int k=ans;k>=price[i][j];k--){
                dp[k-price[i][j]]=max(dp[k-price[i][j]],dp[k]+price[i+1][j]-price[i][j]);                                       
            }
        }
        int tmp=0;
        for(int j=0;j<=ans;j++) tmp=max(dp[j],tmp);
        ans=tmp;
    }
    cout<<ans<<'\n';
    
    return 0;
}

 

posted @ 2023-09-03 10:03  JMXZ  阅读(61)  评论(0)    收藏  举报