洛谷 P1005 矩陣取數遊戲

2021-10-01 19:54:35 字數 981 閱讀 4430

好多題解的f[i][j]表示還剩[i-j]沒取的最大值,如果這樣寫的話,最後還要取個max(f[i][i]+a[i]*2^m),如果轉化一下題意來做也是可以的。

#include

#define int __int128

//不會高精,只能__int128水一波了,如果考試考到,也只能放棄了

using

namespace std;

const

int n=81;

int n,m,ans;

int p[n]

,a[n]

[n],f[n]

[n];

inline

intread()

while

(isdigit

(ch)

)return ret*ff;

}inline

void

write

(int x)

if(x>9)

write

(x/10);

putchar

(x%10+48

);}signed

main()

轉移而來,但是f[i][j]時含義是什麼呢???

//含義是取完i-j的數後的最大值嗎?好像不對吧?有點懷疑了,因為,不是說只能取行首或行尾嗎?

//那比如有1-5個數,f[2][3]由轉移過來???最先取的數居然在中間???

//現在來轉化一下題意吧:

//取m次,使得每次取完後,所有被取走的數是連續的,對於第i次取的數,貢獻累加上a*2^(m-i+1)

//然後就可以做了

for(

register

int t=

1; t<=n;

++t)

ans+

=f[1

][m];}

write

(ans)

;return0;

}

洛谷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...

洛谷 P1005 矩陣取數遊戲

沒錯 本齟齬又來水題解了 題目鏈結 給你乙個大小為n m的矩陣,你將進行m次操作,每次操作可以拿矩陣中每一行兩端的其中乙個數字,每個數字只能拿一次。拿乙個數字的貢獻為該數字的權值val 2 i 這個數是在第i次操作被拿走的 然後問在m次操作後最大貢獻和為多少。這道題就很像乙個執行了n次的區間取數問題...

洛谷P1005 矩陣取數遊戲

帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分...