社区讨论

救命!求调!

P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m0qc3uqg
此快照首次捕获于
2024/09/06 14:27
2 年前
此快照最后确认于
2025/11/04 21:41
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
using ll = __int128;

namespace awa {
	const ll N = 100;
	ll a[N], f[N][N];
	ll maxx[N];
	int t = 1;
	int n, m;

	ll read();
	void dp(int, int);
	void out(ll);


	void solve() {
		n = read(), m = read();

		for (t = 1; t <= n; t++) {
			for (int i = 1; i <= m; i++) a[i] = read();
			for (int i = 1; i <= m; i++)
				f[i][i] = a[i] * (1 << m);

			for (int i = 1; i <= m; i++) {
				for (int j = i ; j <= m; j++) {
					f[i][j] = max(f[i + 1][j] + a[i] * (1 << (m - j + i)),
					              f[i][j - 1] + a[j] * (1 << (m - j + i)));
				}
			}
			maxx[t] = f[1][m];
		}
		ll sum = 0;
		for (int i = 1; i <= n; i++) {
			sum += maxx[i];
		}
		out(sum);
	}

	void out(ll x) {
		if (x == 0) {
			putchar('0');
			return;
		}
		int q[42], top = 0;
		memset(q, 0, sizeof q);
		while (x > 0) {
			q[++top] = x % 10;
			x = x / 10;
		}
		for (int i = top; i >= 1; i--)
			printf("%d", q[i]);
	}
	ll read() {
		ll x = 0, f = 1;
		char c = getchar();
		while (!isdigit(c)) {
			if (c == '-')
				f = -1;
			c = getchar();
		}
		while (isdigit(c)) {
			x = x * 10 + c - '0';
			c = getchar();
		}
		return x * f;
	}

}


int main() {
	awa::solve();
	return 0;
}

就是方程应该没问题,但是样例都过不去。。。
求助QAQ。

回复

1 条回复,欢迎继续交流。

正在加载回复...