P1004 方格取数

题目地址


易错点:

  • 注意样例的位置点数量与n的关系
  • .

#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=12;
int a[MAXN][MAXN],dp[MAXN][MAXN][MAXN][MAXN];
int main(){
	int n;
	scanf("%d",&n);
	int x,y,value;
	do{
		scanf("%d%d%d",&x,&y,&value);
		a[x][y]=value;
	}while(x!=0);
	for(int x1=1;x1<=n;x1++)
	for(int y1=1;y1<=n;y1++)
	for(int x2=1;x2<=n;x2++)
	for(int y2=1;y2<=n;y2++){
		dp[x1][y1][x2][y2]=max(
		dp[x1-1][y1][x2-1][y2],max(
		dp[x1-1][y1][x2][y2-1],max(
		dp[x1][y1-1][x2-1][y2],
		dp[x1][y1-1][x2][y2-1])));
		dp[x1][y1][x2][y2]+=a[x1][y1]+a[x2][y2];
		if(x1==x2&&y1==y2)dp[x1][y1][x2][y2]-=a[x2][y2];
	}
	printf("%d
",dp[n][n][n][n]);
	return 0;
}
原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680598.html