題目大意:現在要你去**,給你每天的開盤價值,每股**價值為ap,賣出價值為bp,每天最多買as股,最多賣出bs股,並且要求兩次買賣必須間隔w天,問你在t天內如何進行**操作從而獲得最大收益。
解題思路:先吐槽一下,會單調佇列但不會dp不行,會dp但不會單調佇列也不行!!開始dp動態轉移方程倒是寫對了,然後算算時間複雜度t*t*maxp*maxp,優化不得當,一直以為是dp思路錯了,囧。
對於有單調佇列參與dp的題,dp方程必須準確先寫好,然後再觀察可否用單調佇列。
dp[i][j]:表示第i天手上持有j股的最大利益。三種決策:
que[maxn];
1819
intmain()
2045 front=0, tail=-1;46
for(int j=maxp; j>=0; j--)
4753}54
int maxx=0;55
for(int i=0; i<=maxp; i++)
56 maxx=max(maxx,dp[n][i]);
57 printf("
%d\n
",maxx);58}
59return0;
60 }
view code
HDU 3401 Trade 單調佇列優化
題意 第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 ...
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...