NOIP2007 矩陣取數遊戲

2022-05-03 13:27:19 字數 866 閱讀 3482

傳送門給定乙個n*m的矩陣,在每一行中取m次數,每次取數只能從行首或尾取數,第i次取數的貢獻是 \(2^i*該點值\) ,操作n行,求最大答案

n,m<=80

不難發現行與行之間是完全獨立的,所以單獨處理每一行就好了

考慮區間dp

設 dp[i][j] 表示區間i~j的答案最大值

則有 \(dp[i][j]=max(num[i]*q[m-(i-j)]+dp[i+1][j],num[j]*q[m-(i-j)]+dp[i][j-1])\)

其中 m-(r-l) 是當前操作次數 (想想為什麼)

num表示原數,q[i]表示 2^i 我也不知道為什麼要用q,或許是因為快速冪習慣了???

然後記搜一下就好了

#includeusing namespace std;

#define re register

#define ll long long

#define get getchar()

#define in inline

in int read()

__int128 n,m,dp[101][101],q[80],num[1001],ans;

in __int128 dfs(int l,int r)

in void out()

for(re int i=tot;i>=1;i--)putchar(s[i]);

cout<} //我也不知道為什麼,好像int128只能這樣輸出(霧???

int main()

if(ans==0)

cout<<0;

else

out();

return 0;

}

NOIP2007 矩陣取數遊戲

鏈結 簡單dp 毒瘤高精 顯然行與行沒有關聯 所以只需要每行處理 考慮dp i,j,k 表示第i次取數,第j行,有k次取的頭的最大分數 直接dp即可 includeusing namespace std define ll int128inline intread while ch 0 ch 9 d...

noip2007矩陣取數遊戲 2008 11 5

noip2007矩陣取數遊戲 2008.11.5 注意 比大小位數不相同時,取位數大的數大 當位數相同時,要從最高位開始比較,相同,則往下比,不相同,則大的數就大。我剛開始,弄成了從最低位開始比較,故,wa了 20多分鐘 小結 這道題,我打了不下 5遍,一定要先想好,在紙上把每個細節都確定了,並確定...

NOIP2007提高組 矩陣取數遊戲

本題dp 高精度即可。首先我們可以發現它的貢獻只與行有關係,於是就分成n行,每行都做dp,然後將max加起來即可。ps 用高精度實現 上標 include include include define mo 100000 define ll long long using namespace std...