记录编号 |
259008 |
评测结果 |
AAAAAA |
题目名称 |
[NOIP 2000]方格取数 |
最终得分 |
100 |
用户昵称 |
派特三石 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2016-05-07 21:01:15 |
内存使用 |
0.19 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
const int maxn=50;
int g[maxn][maxn];
int f[maxn*2][maxn][maxn];
int mmax(int a,int b,int c,int d)
{
int ans=0;
ans=max(a,b);
ans=max(ans,c);
ans=max(ans,d);
return ans;
}
int init()
{
freopen("fgqs.in","r",stdin);
freopen("fgqs.out","w",stdout);
int n;
scanf("%d",&n);
while(1)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x==0)break;
g[x][y]=z;
}
for(int k=1;k<=n+n;++k)
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
f[k][i][j]=mmax(f[k-1][i][j],f[k-1][i-1][j],f[k-1][i][j-1],f[k-1][i-1][j-1])+g[i][k-i]+g[j][k-j];
if(i==j)f[k][i][j]-=g[j][k-j];
}
}
}
int ans=max(f[n+n-3][n-1][n],f[n+n-3][n][n-1]);
printf("%d",f[n*2][n][n]);
return 0;
}
int you=init();
int main()
{
;
}