題意:**。第i天**一股的價錢api,賣出一股的價錢bpi,最多**asi股,最多賣出bsi股。兩次操作(**或賣出)中間必須相差w天。**時間為n。任意時間手中的**不大於maxp。求最大收益。
dp[i][j]代表第i天手上有j股的最大收益,dp[i][j]=max(dp[i-1][j],dp[i-w][k]+(j-k)*ap[i],dp[i-w][k]+(k-j)*bp[i]);
dp[i-w][k]+j*ap[i]-k*ap[i];
dp[i-w][k]+k*bp[i]-j*bp[i];
用單調佇列維護
1 #include2 #include3 #include4 #include5 #include6 #include7
#define inf 0x7fffffff
8struct
opq[20005
],temp;
11int
n,m,w;
12int ap[2005],bp[2005],as[2005],bs[2005
];13
int dp[2005][2005
],h,t;
14int
main()
40 h=t=1;41
for (int j=m;j>=0;j--)
49}
50int ans=0;51
for (int i=0;i<=m;i++)
52 ans=std::max(ans,dp[n][i]);
53 printf("
%d\n
",ans); 54}
55 }
HDU 3401 Trade 單調佇列優化dp
題目大意 現在要你去 給你每天的開盤價值,每股 價值為ap,賣出價值為bp,每天最多買as股,最多賣出bs股,並且要求兩次買賣必須間隔w天,問你在t天內如何進行 操作從而獲得最大收益。解題思路 先吐槽一下,會單調佇列但不會dp不行,會dp但不會單調佇列也不行!開始dp動態轉移方程倒是寫對了,然後算算...
HDU3401 Trade 單調佇列優化dp
分析可以設定二維的dp狀態i天有j塊錢的最大收益 對w 1天之前的每天進行初始化,因為在這個時候只能買,也可以不買,但是這個不買在後面進行集體操作 之後就有3種情況,一種是買,一種是不操作,一種賣出 並且只有當滿足條件的時候才能進行買賣,那麼這個優化方法就明顯了,不買的情況就是等於前一天這個錢的大小...
hdu 3401 Trade 單調佇列優化dp
題意 lxhgww喜歡 票,他可以在第i天 或者賣出若干張 一天只能買或者賣 兩個交易日之間至少相隔w天,問他t天後最多能賺多少。解題思路 首先我們可以得出的dp狀態是,dp i j 表示第i天有j張 最多能持有多少錢,初始值dp 0 0 0 其餘都為 inf。那麼我們可以得到乙個時間複雜度為o t...