社区讨论
60pts求调
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhj0g8id
- 此快照首次捕获于
- 2025/11/03 18:42 4 个月前
- 此快照最后确认于
- 2025/11/03 18:42 4 个月前
CPP
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int n, m, a[1005];
__int128 dp[85][85], pw[1005], ans;
inline int read(){
register char c = getchar();
register int f = 1,x = 0;
while(c<'0'||c>'9'){
if(c=='-')f = -1;
c = getchar();
}
while(c>='0'&&c<='9')x = (x<<3)+(x<<1)+c-'0',c = getchar();
return x*f;
}
inline void write(register int x){
register int cnt = 20,st[25];
if(x==0)putchar('0');
while(x){
st[cnt--] = char(x%10+'0');
x/=10;
}
while(cnt<20)putchar(st[++cnt]);
putchar('\n');
return;
}
signed main()
{
n = read(), m = read();
pw[0] = 1;
for(int i = 1; i <= 80; i ++)
{
pw[i] = pw[i - 1] * 2;
}
for(int k = 1; k <= n; k ++)
{
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= m; i ++)
{
cin >> a[i];
dp[i][i] = a[i] * pw[m];
}
for(int len = 2; len <= m; len ++)
{
for(int i = 1; i + len - 1 <= m; i ++)
{
int j = i + len - 1;
dp[i][j] = max(dp[i][j] , dp[i + 1][j] + a[i] * pw[m - j + i]);
dp[i][j] = max(dp[i][j] , dp[i][j - 1] + a[j] * pw[m - j + i]);
}
}
ans += dp[1][m];
}
write(ans);
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...