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; }
                    
                
                
            
        
浙公网安备 33010602011771号