好多題解的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.每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分...