社区讨论

WA 42pts求调必关

P1004[NOIP 2000 提高组] 方格取数参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@m2fqn18n
此快照首次捕获于
2024/10/19 13:48
去年
此快照最后确认于
2025/11/04 16:51
4 个月前
查看原帖
rt
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
int a[10][10];
int dp[10][10][10];
int main() {
	memset(dp,-1,sizeof(dp));
	memset(a,0,sizeof(a));
	cin >> n;
	int x, y, z;
	while (1) {
		cin >> x >> y >> z;
		if (x == 0 and y == 0 and z == 0) break;
		a[x][y] = z;
	}
	dp[1][1][1] = a[1][1];
	for (int k = 2; k <= 2 * n - 1; k++) {
		for (int x1 = 1; x1 <= n; x1++) {
			for (int x2 = 1; x2 <= n; x2++) {
				int y1 = k - x1;
				int y2 = k - x2;
				int cur=dp[x1][y1][x2];
				if (y1<1 or y1>n or y2<1 or y2>n) continue;
				dp[x1][y1][x2] = -1;
                if (x1 > 1 && x2 > 1)
                    cur = max(cur, dp[x1 - 1][y1][x2 - 1]);
                if (x1 > 1 && y2 > 1)
                    cur = max(cur, dp[x1 - 1][y1][x2]);
                if (y1 > 1 && x2 > 1)
                    cur = max(cur, dp[x1][y1 - 1][x2 - 1]);
                if (y1 > 1 && y2 > 1)
                    cur = max(cur, dp[x1][y1 - 1][x2]);
                if (x1 == x2 && y1 == y2)
                    cur += a[x1][y1];
                else
                    cur += a[x1][y1] + a[x2][y2];
                dp[x1][y1][x2]=cur;
			}
		}
	}
	cout << dp[n][n-1][n] << endl;
	return 0;
}

回复

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

正在加载回复...