矩陣取數遊戲(區間DP int128)

2022-09-09 04:54:11 字數 923 閱讀 1807

原題鏈結

思路

考慮後發現每一行獨立,可以每一行單獨算最大值,最後加起來即可,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次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 ...