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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

17AHU排位赛1 C题(经典DP)

發(fā)布時(shí)間:2023/12/20 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 17AHU排位赛1 C题(经典DP) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

problem

《snow halation》是μ’s的第二張單曲,其歌曲第二段伴奏結(jié)束后主唱穗乃果唱出“屆けて”的同時(shí),全場(chǎng)應(yīng)援棒瞬間從白色轉(zhuǎn)換成橙色。由于高度的整齊和效果的震撼,被稱(chēng)為“橙色的奇跡”,這也是“如果奇跡有顏色,那么一定是XX色”的最早來(lái)源。


現(xiàn)在,到了你來(lái)應(yīng)援的時(shí)候了!
使用不同的應(yīng)援形式有不同的效果(如里打、里跳、快揮、前揮、GT警報(bào)……),比如通常會(huì)GT警報(bào)后接著做里跳,這樣能夠讓人更加沉迷到演唱會(huì)的氣氛中。
經(jīng)過(guò)精密的計(jì)算,我們終于得到了不同的應(yīng)援形式連著對(duì)活躍氣氛的貢獻(xiàn)值(增加氣氛的活躍值)。
現(xiàn)在給你一首歌的call表(記錄應(yīng)該如何應(yīng)援),里面有一部分是0(代表這個(gè)動(dòng)作可以自己隨意選擇),另一部分是非0整數(shù),表示這個(gè)時(shí)候有規(guī)定的動(dòng)作要做。
求這首歌能達(dá)到的最大氣氛活躍值。
初始的氣氛活躍值為0,第一個(gè)應(yīng)援動(dòng)作對(duì)氣氛無(wú)影響。

Input

第1行:組數(shù)T(非負(fù)整數(shù),1<=T<=10)

第2行:應(yīng)援動(dòng)作數(shù)n,call表長(zhǎng)度m(非負(fù)整數(shù),0<=n,m<=100)

第3~3+n行:每行n個(gè)整數(shù),表示在第i個(gè)動(dòng)作后接j的氣氛貢獻(xiàn)值,Wi,j表示當(dāng)前行第j個(gè)。(|Wi,j|<=100)

第4+n行:m個(gè)非負(fù)整數(shù)a[i],表示call表內(nèi)容。(0<=a[i]<=n)
……

Output

一行,一個(gè)整數(shù),表示能達(dá)到的最大氣氛活躍值。

Sample Input

2
3 5
83 86 77
15 93 35
86 92 49
3 3 3 1 2
5 10
36 11 68 67 29
82 30 62 23 67
35 29 2 22 58
69 67 93 56 11
42 29 73 21 19
0 0 5 0 4 0 0 0 4 0

Sample Output

270
625

Hint

樣例解釋:
2
3 5
83 86 77
15 93 35
86 92 49
3 3 3 1 2

3 3 3 1 2
沒(méi)有可以自己隨便選的,直接計(jì)算得到49+49+86+86=270

5 10
36 11 68 67 29
82 30 62 23 67
35 29 2 22 58
69 67 93 56 11
42 29 73 21 19
0 0 5 0 4 0 0 0 4 0

4 3 5 1 4 1 4 1 4 5
按照這樣的順序來(lái)選
可以達(dá)到最大值 93+58+42+67+69+67+69+67+93


思路

最近剛接觸DP,昨天排位賽中沒(méi)有推出(大概想了20min沒(méi)有思路),今天看了ppt的提示,提示是這樣說(shuō)的:

考慮dp[i][j]表示前i個(gè)位置,第i個(gè)位置選擇第j個(gè)姿勢(shì)的最大值

然后就開(kāi)始寫(xiě)程序,中間遞推式需要停下來(lái)想一下,最后完成了ac。

所以DP給我的感覺(jué)是怎么表示狀態(tài)很重要,一旦清楚什么參數(shù)表示什么自然而然遞推式就可以去試著推出來(lái),再加上邊界那這題就OK了。
所以問(wèn)題的關(guān)鍵在于:

構(gòu)造狀態(tài)

還是多多練習(xí)吧!


代碼示例

#include<bits/stdc++.h> using namespace std;const int maxn=105;const int inf=0x3f3f3f3f;int n,m;int arr[maxn];int call[maxn][maxn];//存call表 下標(biāo)1開(kāi)始int dp[maxn][maxn]; //dp[i][j]表示第i個(gè)位置(i-1個(gè)氣氛值)選擇j動(dòng)作的最大值int main() {ios::sync_with_stdio(false);int T;cin>>T;while(T--){memset(dp,-inf,sizeof(dp));cin>>n>>m;for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){cin>>call[i][j];}}for(int i=1;i<=m;++i){cin>>arr[i];}for(int i=1;i<=n;++i){dp[1][i]=0;}for(int i=2;i<=m;++i){if(arr[i-1]){if(arr[i]){dp[i][arr[i]]=dp[i-1][arr[i-1]]+call[arr[i-1]][arr[i]];//for(int j=1;j<=n;++j) if(j!=arr[i]) dp[i][j]-=100000;}else{for(int j=1;j<=n;++j){dp[i][j]=dp[i-1][arr[i-1]]+call[arr[i-1]][j];}}}else{if(arr[i]){for(int j=1;j<=n;++j){dp[i][arr[i]]=max(dp[i][arr[i]],dp[i-1][j]+call[j][arr[i]]);}}else{for(int j=1;j<=n;++j){for(int k=1;k<=n;++k){dp[i][k]=max(dp[i][k],dp[i-1][j]+call[j][k]);}}}}}int ans=-inf;for(int i=1;i<=n;++i){if(dp[m][i]>ans) ans=dp[m][i];}cout<<ans<<endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的17AHU排位赛1 C题(经典DP)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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