HDU 3401 Trade 單調佇列優化

2022-05-09 01:51:11 字數 856 閱讀 2697

題意:**。第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 #include

6 #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...