日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DP专练4:[SCOI 2010]股票交易(单调队列优化dp)

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DP专练4:[SCOI 2010]股票交易(单调队列优化dp) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天晚上,初見它時(shí),月黑風(fēng)高,一個(gè)電腦,一支筆,一個(gè)人

今天秋高氣爽,再一瞥,回眸間

我又來了,honey

  • 題目
  • 題解
  • 代碼實(shí)現(xiàn)

題目



題解

首先這種 iii 天與前面 jjj 天有關(guān)聯(lián),而且讓你求最后一天的極值
我們一定會(huì)聯(lián)想到 DPDPDP


先搞定 dpdpdp 定義?

第一維毋庸置疑就是表示 iii 天,接著思考一下第二維 jjj
1)如果表示 iii 天買了或者賣了 jjj 股票,就遇到了一個(gè)問題,i?W?1i-W-1i?W?1 天的時(shí)候股票數(shù)又是多少呢?
難道我要再去用一重循環(huán)枚舉嗎?顯然不現(xiàn)實(shí)。

2)如果表示 iii 天手上還擁有著 jjj 股票( iii 天已經(jīng)操作完成了)
那么 ±k±k±k 就是 i?W?1i-W-1i?W?1 的股票數(shù)了

綜上 dp[i][j]:idp[i][j]:idp[i][j]:i 天手上的股票數(shù)為 jjj 時(shí)的最大收益。

最后輸出 dp[n][0]dp[n][0]dp[n][0] 就可以了,nnn 天的時(shí)候手上沒有股票數(shù)肯定是最優(yōu)解了,不然你手上捏著股票又買賣不了,拿來擦屁股嗎??


找到轉(zhuǎn)移方程式?

  • 這一天閑得慌,不買也不賣

    dp[i][j]=dp[i?1][j](0≤j≤MaxP)dp[i][j]=dp[i-1][j] (0≤j≤MaxP)dp[i][j]=dp[i?1][j](0jMaxP)

  • 這一天才開始玩股票,只能去購(gòu)進(jìn)股票

    dp[i][j]=?j?api(j?asi≤k<j)dp[i][j]=-j*ap_i(j-as_i≤k<j)dp[i][j]=?j?api?(j?asi?k<j)

  • 自由權(quán)比較大,手上有點(diǎn)資本,也要購(gòu)進(jìn)

    dp[i][j]=dp[i?W?1][k]?(j?k)?api(j?asi≤k<j)dp[i][j]=dp[i-W-1][k]-(j-k)*ap_i(j-as_i≤k<j)dp[i][j]=dp[i?W?1][k]?(j?k)?api?(j?asi?k<j)

  • 該開始賺錢錢了,賣一點(diǎn)股票出去

    dp[i][j]=dp[i?W?1][k]+(k?j)?bpi(j<k≤j+bsi)dp[i][j]=dp[i-W-1][k]+(k-j)*bp_i(j<k≤j+bs_i)dp[i][j]=dp[i?W?1][k]+(k?j)?bpi?(j<kj+bsi?)

在這四種情況下,取一個(gè) maxmaxmax 即可。

那么為什么i-W-1就是當(dāng)前最優(yōu)解呢?

因?yàn)槲覀兪且惶煲惶爝f推過去的,當(dāng)前最優(yōu)解會(huì)被傳遞過去,

這也是我們DP需要完成的


分析這個(gè) DPDPDP 的時(shí)間復(fù)雜度,O(n3)O(n^3)O(n3)

所以必須對(duì) kkk 優(yōu)化

我們就去拆一拆 case3 case4 的 DPDPDP

dp[i][j]=dp[i?W?1][k]?(j?k)?api(j?asi≤k<j)dp[i][j]=dp[i-W-1][k]-(j-k)*ap_i(j-as_i≤k<j)dp[i][j]=dp[i?W?1][k]?(j?k)?api?(j?asi?k<j)?\Downarrow ?dp[i][j]=dp[i?W?1][k]+k?api?j?api(j?asi≤k<j)dp[i][j]=dp[i-W-1][k]+k*ap_i-j*ap_i(j-as_i≤k<j)dp[i][j]=dp[i?W?1][k]+k?api??j?api?(j?asi?k<j)
我們會(huì)發(fā)現(xiàn) j?apij*ap_ij?api? 是固定不變的。

也就是說真正影響 dp[i][j]dp[i][j]dp[i][j] 的是 dp[i?W?1][k]+k?apidp[i-W-1][k]+k*ap_idp[i?W?1][k]+k?api?

而且 dp[i?W?1][k]+k?apidp[i-W-1][k]+k*ap_idp[i?W?1][k]+k?api? 越大越好。

發(fā)現(xiàn)這個(gè)方程的實(shí)質(zhì)是 k∈[j?asi,j)k∈[j-as_i,j)k[j?asi?,j) 這個(gè)范圍內(nèi)取得的且只和 kkk 有關(guān)。

dp[i][j]=dp[i?W?1][k]+(k?j)?bpi(j<k≤j+bsi)dp[i][j]=dp[i-W-1][k]+(k-j)*bp_i(j<k≤j+bs_i)dp[i][j]=dp[i?W?1][k]+(k?j)?bpi?(j<kj+bsi?)?\Downarrow?dp[i][j]=dp[i?W?1][k]+k?bpi?j?bpi(j<k≤j+bsi)dp[i][j]=dp[i-W-1][k]+k*bp_i-j*bp_i(j<k≤j+bs_i)dp[i][j]=dp[i?W?1][k]+k?bpi??j?bpi?(j<kj+bsi?)

我們會(huì)發(fā)現(xiàn) j?bpij*bp_ij?bpi? 是固定不變的。

也就是說真正影響 dp[i][j]dp[i][j]dp[i][j] 的是 dp[i?W?1][k]+k?bpidp[i-W-1][k]+k*bp_idp[i?W?1][k]+k?bpi?

而且 dp[i?W?1][k]+k?bpidp[i-W-1][k]+k*bp_idp[i?W?1][k]+k?bpi? 越大越好。

發(fā)現(xiàn)這個(gè)方程的實(shí)質(zhì)是 k∈(j,j+bsi]k∈(j,j+bs_i]k(j,j+bsi?] 這個(gè)范圍內(nèi)取得的且只和k有關(guān)

結(jié)合以上兩種情況:就會(huì)聯(lián)想到我們的單調(diào)隊(duì)列了。

維護(hù) kkk 的范圍而且從大到小,每次取隊(duì)頭 headheadhead 進(jìn)行更值

這樣就轉(zhuǎn)化成了O(n2)O(n^2)O(n2)


最后注意一下循環(huán)順序

買股票就從小到大 0~MaxP0\sim MaxP0MaxP

賣股票就從大到小 MaxP~0MaxP\sim 0MaxP0

代碼實(shí)現(xiàn)

#include <cstdio> #include <iostream> using namespace std; #define MAXN 2005 int T, MaxP, W; int ap, bp, as, bs; int head, tail; int deq[MAXN]; int dp[MAXN][MAXN]; int main() {scanf ( "%d %d %d", &T, &MaxP, &W );++ W;dp[0][0] = -MAXN * MAXN;for ( int i = 1;i <= MaxP;i ++ )dp[0][i] = dp[0][i - 1];for ( int i = 1;i <= T;i ++ ) {scanf ( "%d %d %d %d", &ap, &bp, &as, &bs );for ( int j = 0;j <= MaxP;j ++ )dp[i][j] = dp[i - 1][j];for ( int j = 0;j <= as;j ++ )dp[i][j] = max ( dp[i][j], -j * ap );if ( i > W ) {head = 1, tail = 0;for ( int j = 0;j <= MaxP;j ++ ) {while ( head <= tail && deq[head] < j - as )head ++;while ( head <= tail && deq[tail] * ap + dp[i - W][deq[tail]] <= j * ap + dp[i - W][j] )-- tail;deq[++ tail] = j;dp[i][j] = max ( dp[i][j], dp[i - W][deq[head]] + deq[head] * ap - j * ap );}head = 1, tail = 0;for ( int j = MaxP;j >= 0;j -- ) {while ( head <= tail && deq[head] > j + bs )head ++;while ( head <= tail && deq[tail] * bp + dp[i - W][deq[tail]] <= j * bp + dp[i - W][j] )tail --;deq[++ tail] = j;dp[i][j] = max ( dp[i][j], dp[i - W][deq[head]] + deq[head] * bp - j * bp );}}}printf ( "%d", dp[T][0] );return 0; }

總結(jié)

以上是生活随笔為你收集整理的DP专练4:[SCOI 2010]股票交易(单调队列优化dp)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美福利片在线观看 | 国产美女视频免费观看下载软件 | 久久福利在线 | 日韩一区二区三区中文字幕 | 欧美大胆a视频 | 一区二区三区欧美精品 | 最新日韩一区 | 香港三级日本三级韩国三级 | 污污网站在线免费观看 | 尤物国产| 欧美123| 中文字幕日本人妻久久久免费 | 伊人艹| 亚洲涩色 | 天天干妹子 | 天天干夜夜拍 | 欧美成人一二区 | jizz韩国| 国产三级大片 | 日本色呦呦 | 美女啪啪网站 | 亚洲一区二区三区精品视频 | 国产美女精品久久 | 本道综合精品 | 免费av不卡在线观看 | 国产稀缺精品盗摄盗拍 | 日韩理论视频 | xxx久久| 黑人巨大精品欧美黑寡妇 | h片在线 | 精品小视频 | 疯狂少妇 | 国产91精品一区二区 | 亚州中文字幕 | 成人一级影片 | 国产jk精品白丝av在线观看 | 五月天综合婷婷 | 色综合精品 | 奇米影视第四色首页 | 免费a视频在线观看 | 99久久久无码国产精品衣服 | 伊人影院在线视频 | 国产福利社 | 亚洲男人天堂2023 | 怡春院欧美 | 国产综合久久久久久鬼色 | 超碰免费在线97 | 日韩在线二区 | 亚洲国产日韩a在线播放性色 | 免费一级片网站 | 国产精品久久99 | 国产精品福利在线播放 | 久久久精品人妻一区二区三区色秀 | 国产一区二区三区在线视频 | 欧美成人午夜视频 | 午夜888 | 在线观看污| 日韩一级理论片 | 亚洲精品乱码久久久久久久久久久久 | 色婷婷av国产精品 | 天天欧美 | 性一交一乱一乱一视频 | 搡8o老女人老妇人老熟 | www国产精品视频 | 国产区在线看 | 成人免费视频一区 | 成年免费视频黄网站在线观看 | 日韩视频在线免费观看 | 久久国产这里只有精品 | 中文字幕在线观看网址 | 国产精品第一区 | 亚洲av乱码一区二区 | 精品国产一区二区三区在线 | 国产高清视频在线免费观看 | 免费观看全黄做爰的视频 | 巨乳xxx | 女的高潮流时喷水图片大全 | 欧美人一级淫片a免费播放 西方av在线 | 日韩成人免费在线观看 | 久久午夜夜伦鲁鲁一区二区 | 爱爱福利社| 国产成人精品在线播放 | 男人天堂成人 | 成人高清视频在线观看 | 91精品国产手机 | 快色视频 | av亚州| 一级片视频免费观看 | 中文一区二区在线播放 | 在线观看免费视频国产 | 日韩欧美中文在线 | 欧美成人精品一区二区 | 国产真实乱在线更新 | 日本美女一区二区 | 波多野结衣视频一区 | 国产高清成人久久 | 精品1区2区3区 | 国产高潮国产高潮久久久91 | 中文在线免费视频 |