傳送門給定乙個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...