P1005 矩陣取數

2022-05-11 04:12:09 字數 763 閱讀 4452

看完題可能第一時間並沒有清晰的思路。讓我們一步一步的來考慮這道題目。

題目中描述操作為每次從所有的行中選取,這樣做有些麻煩。仔細思考一下可以發現行與行之間互不干涉,所以我們可以對每行操作到底,最後統計答案。

每行怎麼選取當然難不倒聰明的oier了,設f[i][j]表示某行從第i位到第j位的最優答案。

轉移如下

f[i][j]=max((f[i+1][j]+b[i]<<1),(f[i][j-1]+b[j]<<1));

到此,這道題目就做完了。

1 #include2 #include3 #include4 #include5 #include6

#define ll __int128_t

7using

namespace

std;

8inline ll read()

915 inline void

write(ll x)

1620

intn,m;

21 ll a[81][81],f[81][81

],ans;

22ll work(ll b)

2331

return f[1

][m];32}

33int

main()

34

view code

需要注意的是,這道題目由於資料範圍過大需要使用高精度運算,然而在洛谷上是可以用_int128水過去的。

P1005 矩陣取數遊戲

p1005 矩陣取數遊戲 區間dp,憨貪心可以過兩個點,f l r 表示l,r這一段都選完的取得的最大得分 f l r max f 1 l r a l f l r 1 a r 2 越靠中間,乘的2越多,列舉區間長度,和左右端點 答案是f 1 m 1 include2 include3 include...

P1005 矩陣取數遊戲

帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n mn times mn m的矩陣,矩陣中的每個元素ai,ja ai,j 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共nnn個。經過mmm次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得...

洛谷p1005矩陣取數遊戲

原題 2 80超int,需要高精度計算,也可以int128.行和行之間沒有聯絡,所以只要單獨求每一行之後取和即可,dp過程中i,j分別表示左端點和右端點。include define lll int128 void print lll x int n,m lll ans 0 int a 100 ll...