原題鏈結
思路
考慮後發現每一行獨立,可以每一行單獨算最大值,最後加起來即可,f[l][r]表示考慮第i行的l到r這個區間,能取到的最大值,這裡可以記憶化搜尋。轉移方程為:f[l][r] = max(f[l + 1][r] + a[l] * x, f[l][r - 1] + a[r] * x),其中x是2^i。注意要用int128
int128讀寫模板
int read()
while (c >= '0' && c <= '9')
return f * x;
}void print(int x)
if (x / 10) print(x / 10);
putchar(x % 10 + '0');
}
題目**
#include using namespace std;
#define int __int128
const int n = 100;
int a[n];
int f[n][n];
int n, m;
int read()
while (c >= '0' && c <= '9')
return f * x;
}void print(int x)
if (x / 10) print(x / 10);
putchar(x % 10 + '0');
}int dfs(int l, int r)
int main()
print(ans);
puts("");
return 0;
}
區間DP 矩陣取數遊戲
試題 noip2007 提高組 問題描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的 n m的矩陣,矩陣中的每個元素 aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共 n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有...
矩陣取數遊戲
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 被取走...
P1005 矩陣取數遊戲 區間dp
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的 m n 的矩陣,矩陣中的每個元素 a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 ...