矩陣取數遊戲 NOIP

2022-05-12 23:25:25 字數 2396 閱讀 6117

題目描述 description

【問題描述】

帥帥經常跟同學玩乙個矩陣取數遊戲:對於乙個給定的n*m 的矩陣,矩陣中的每個元素aij均

為非負整數。遊戲規則如下:

1. 每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素;

2. 每次取走的各個元素只能是該元素所在行的行首或行尾;

3. 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分= 被取走的元素值*2i,

其中i 表示第i 次取數(從1 開始編號);

4. 遊戲結束總得分為m次取數得分之和。

帥帥想請你幫忙寫乙個程式,對於任意矩陣,可以求出取數後的最大得分。

輸入描述 input description

第1行為兩個用空格隔開的整數n和m。

第2~n+1 行為n*m矩陣,其中每行有m個用單個空格隔開的非負整數。

輸出描述 output description

輸出 僅包含1 行,為乙個整數,即輸入矩陣取數後的最大得分。

樣例輸入 sample input

2 31 2 3

3 4 2

樣例輸出 sample output

82資料範圍及提示 data size & hint

樣例解釋

第 1 次:第1 行取行首元素,第2 行取行尾元素,本次得分為1*21+2*21=6

第2 次:兩行均取行首元素,本次得分為2*22+3*22=20

第3 次:得分為3*23+4*23=56。總得分為6+20+56=82

【限制】

60%的資料滿足:1<=n, m<=30, 答案不超過1016

100%的資料滿足:1<=n, m<=80, 0<=aij<=1000

似乎是個區間dp,雖然給的是個矩陣,但我們一行一行取,不影響結果

很顯然,以區間長度作為dp物件,把一整長序列一小段一小段拆解,在逐漸合併結果,以區域性最優推導全域性最優。有點類似於歸併排序的分治思想

我們每選取乙個數,相當於整個區間自帶了乙個 x2 buff ,就不需要管他是第幾次取的

但這道題麻煩不在於dp方程,而在於高精度

#include#include

#include

#define ll long long

using

namespace

std;

ll ans,game[

110][110],f[110][110

];;int

n,m;

inline

intread()

while(ch>='

0' && ch<='

9') s=s*10+ch-'

0',ch=getchar();

return s*f;

} void

sol(ll a)

}ans+=f[1

][m];

}int

main()

}for(int i=1;i<=n;++i) sol(game[i]);

printf(

"%lld

",ans);

return0;

}/*2 31 2 3

3 4 2

*/

#include#include

#include

#define bll __int128

using

namespace

std;

bll ans,game[

110][110],f[110][110

];int

n,m;

inline

intread()

while(ch>='

0' && ch<='

9') s=s*10+ch-'

0',ch=getchar();

return s*f;

} void

sol(bll a)

}ans+=f[1

][m];

}void

print(bll x)

intmain()

}for(int i=1;i<=n;++i) sol(game[i]);

if(!ans) printf("0"

);

else

print(ans);

return0;

}/*2 31 2 3

3 4 2

*/

NOIP2007 矩陣取數遊戲

傳送門給定乙個n m的矩陣,在每一行中取m次數,每次取數只能從行首或尾取數,第i次取數的貢獻是 2 i 該點值 操作n行,求最大答案 n,m 80 不難發現行與行之間是完全獨立的,所以單獨處理每一行就好了 考慮區間dp 設 dp i j 表示區間i j的答案最大值 則有 dp i j max num...

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遍,一定要先想好,在紙上把每個細節都確定了,並確定...