會發現每一行之間沒有影響,可以做n次區間dp。
設dp[i][j]表示區間[i,j]的取分最大值。如果從小區間向大區間轉移,即
dp[i][j]=max(dp[i+1][j]+a[i],dp[i][j-1]+a[j])*2
這樣$2^i$在轉移的過程中便之間乘上了。
ac**(無高精):
1 #include2 #include3 #include4ac**using
namespace
std;
5 typedef long
long
ll;6
const
int n=90;7
intn,m;
8ll ans;
9int
a[n];
10ll f[n][n];
11int
main()
20 ans+=f[1
][m];21}
22 printf("
%lld
",ans);
23return0;
24 }
洛谷 P1005 矩陣取數遊戲 區間dp
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n times mn m的矩陣,矩陣中的每個元素a ai,j 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共nn個。經過mm次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的...
洛谷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 矩陣取數遊戲
好多題解的f i j 表示還剩 i j 沒取的最大值,如果這樣寫的話,最後還要取個max f i i a i 2 m 如果轉化一下題意來做也是可以的。include define int int128 不會高精,只能 int128水一波了,如果考試考到,也只能放棄了 using namespace ...