60pts求调
查看原帖
60pts求调
733791
Collapsar233楼主2024/11/7 21:25

后四个点WA掉

#include <iostream>
using namespace std;
typedef unsigned long long ull;

const int maxn = 87;
const ull MOD = 1e18;

struct bint
{
	ull h, l;
};

bint max(bint a, bint b)
{
	if (a.l > b.l)
		return a;
	if (a.l < b.l)
		return b;
	if (a.h > b.h)
		return a;
	if (a.h < b.h)
		return b;
	return a;
}

bint operator + (bint a, bint b)
{
	bint k;
	k.l = k.h = 0;
	k.l = a.l + b.l;
	k.h = k.l / MOD + a.h + b.h;
	k.l %= MOD;
	return k;
}

bint operator * (bint a, int b)
{
	bint k;
	k.l = 0, k.h = 0;
	k.l = a.l * b;
	k.h = k.l / MOD + b * a.h;
	k.l %= MOD;
	return k;
}

int n, m;
bint ans, a[maxn], dp[maxn][maxn];

int main()
{
	freopen("P1005_7.in", "r", stdin);
//	ios::sync_with_stdio(false);
//	cin.tie(nullptr);
//	cout.tie(nullptr);
	cin >> n >> m;
	while (n--)
	{
		for (int i = 1; i <= m; ++i)
		{
			cin >> a[i].l;
			dp[i][1] = a[i];
		}
		for (int l = 2; l <= m; ++l)
		{
			for (int i = 1; i + l - 1 <= m; ++i)
			{
				dp[i][l] = max(dp[i][l - 1] * 2 + a[i + l - 1], dp[i + 1][l - 1] * 2 + a[i]);
			}
		}
		ans = ans + dp[1][m];
	}
	ans = ans * 2;
	if (ans.h == 0ll)
		cout << ans.l << "\n";
	else
		cout << ans.h << ans.l << "\n";
	return 0;
}
2024/11/7 21:25
加载中...