1277:【例9.21】方格取数http://ybt.ssoier.cn:8088/problem_show.php?pid=1277

#include
#include
#include
using namespace std;
int n,x,y,z;
int a[15][15];//存取矩阵 
int f[15][15][15][15];//前两维表示第一个人的情况//后两位表示第二个人 
int main()
{
	scanf("%d",&n);
	while(cin>>x>>y>>z&&x&&y)a[x][y]=z;//"无限"输入 
	for(int i=1;i<=n;i++)//两个人同时走//相当于数字三角问题 
	{
		for(int j=1;j<=n;j++)
		{
			for(int k=1;k<=n;k++)
			{
				for(int l=1;l<=n;l++)
				{//转移和数字三角问题一样 
					f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k-1][l],f[i][j-1][k][l-1]))+a[i][j]+a[k][l];
					if(i==k&&j==l)f[i][j][k][l]-=a[i][j];
				}//相遇时只能取一次方格里的数 
			}
		}
	}
	printf("%d",f[n][n][n][n]);	
	return 0;
}

你可能感兴趣的:(1277:【例9.21】方格取数http://ybt.ssoier.cn:8088/problem_show.php?pid=1277)