社区讨论
震惊!
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 9已保存回复 15
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 15 条
- 当前快照
- 1 份
- 快照标识符
- @mi85y7qv
- 此快照首次捕获于
- 2025/11/21 09:10 4 个月前
- 此快照最后确认于
- 2025/11/21 09:46 4 个月前
为什么这道题我用__int128
如果不开O2就能A
开了O2第7个点以后就错了
CPP#include <bits/stdc++.h>
#define max(a,b) (((a)>(b))?(a):(b))
#define MAX (80+10)
using namespace std;
int N,M,d[MAX][MAX];
__int128 B,sum,ans,f[MAX][MAX];
inline void read(int &a)
{
register char c = getchar();
for (a=0; c<'0'||'9'<c; c=getchar());
for (; '0'<=c && c<='9'; c=getchar())
a *= 10, a += c ^ 48;
}
inline void write(const __int128 a)
{
if (a > 9) write(a/10);
putchar((a % 10) ^ 48);
}
int main()
{
read(N); read(M);
for (register int i=1; i<=N; i++)
for (register int j=1; j<=M; j++)
read(d[i][j]);
for (register int T=1; T<=N; T++)
{
B = 1; sum = 0;
memset(f,0,sizeof f);
for (register int S=1; S<=M; S++)
{
B <<= 1;
for (register int L=0,R=S-L; L<=S; L++,R--)
f[L][R] = max(f[L-1][R] + B*d[T][L], f[L][R-1] + B*d[T][M-R+1]);
}
for (register int i=0; i<=M; i++)
sum = max(sum,f[i][M-i]);
ans += sum;
}
write(ans);
}
回复
共 15 条回复,欢迎继续交流。
正在加载回复...