社区讨论
爆__int128怎么办
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 5已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mhjlg73w
- 此快照首次捕获于
- 2025/11/04 04:29 4 个月前
- 此快照最后确认于
- 2025/11/04 04:29 4 个月前
rt,实在不想写高精,如果有大佬帮忙加上就万分感谢
CPP#include <iostream>
using namespace std;
const int MAXN = 80, MAXM = 80;
int n, m;
int a[MAXN + 5][MAXM + 5];
__int128 powOf2[MAXM + 5];
void preprocess() {
powOf2[0] = 1;
for(int i = 1; i <= m + 1; ++i)
powOf2[i] = powOf2[i - 1] + powOf2[i - 1];
}
__int128 dp[MAXN + 5][MAXN + 5];
__int128 rowAns(int i) {
for(int j = 0; j <= m + 1; ++j)
for(int k = 0; k <= m + 1; ++k)
dp[j][k] = 0;
for(int len = m; len >= 0; --len)
for(int j = 1; j <= m - len + 1; ++j) {
int k = j + len;
dp[j][k] = max(dp[j - 1][k] + a[i][j - 1] * powOf2[m - len], dp[j][k + 1] + a[i][k] * powOf2[m - len]);
}
__int128 res = 0;
for(int j = 1; j <= m; ++j)
res = max(res, dp[j][j]);
return res;
}
void output(__int128 x) {
if(x == 0)
cout << 0;
while(x > 0) {
cout << (long long)(x % (long long)1e18);
x /= (long long)1e18;
}
}
int main() {
cin >> n >> m;
for(int i = 0; i < n; ++i) {
for(int j = 1; j <= m; ++j) {
cin >> a[i][j];
}
}
preprocess();
__int128 ans = 0;
for(int i = 0; i < n; ++i)
ans += rowAns(i);
output(ans);
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...