WA 42pts求调必关
查看原帖
WA 42pts求调必关
1475943
libu2333楼主2024/10/19 13:47

rt

#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;
}
2024/10/19 13:47
加载中...