40分求助~
查看原帖
40分求助~
682342
zzzcdq楼主2022/4/24 08:44

大佬帮看,用int128做的,只有40分

#include <bits/stdc++.h>
using namespace std;
int n,m,a[82];
__int128 ans,dp[82][82];
void write(__int128 a)
{
	if(a < 10){
		putchar(a + 48);
		return;
	}
	write(a / 10);
	putchar(a % 10 + 48);
}
__int128 f(int l,int r,int cnt)
{
	if(dp[l][r] != 0) return dp[l][r];
	if(l == r) return a[l] * (1 << cnt);
	dp[l][r] = max(f(l,r - 1,cnt + 1) + __int128(a[r]) * (1 << cnt),f(l + 1,r,cnt + 1) + a[l] * (1 << cnt));
	return dp[l][r];
}
int main()
{
	cin >> n >> m;
	for(int i = 1;i <= n;i ++)
	{
		memset(dp,0,sizeof dp);
		for(int j = 1;j <= m;j ++) cin >> a[j];
		ans += f(1,m,1);
	}
	write(ans);
	return 0;
}

谢大佬

2022/4/24 08:44
加载中...