Information
- ID
- 204
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 34
- Accepted
- 13
- Uploaded By
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int f[N][N][N][N];
int g[N][N];
int main()
{
int n;
cin>>n;
int a,b,c;
while(cin>>a>>b>>c,a&&b&&c)
{
g[a][b]=c;
}
memset(f,0xcf,sizeof f);
f[0][1][0][1]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int i2=1;i2<=n;i2++)
{
for(int j2=1;j2<=n;j2++)
{
int t1=max(f[i-1][j][i2-1][j2],f[i-1][j][i2][j2-1]); //(上上),(上,左)
int t2=max(f[i][j-1][i2-1][j2],f[i][j-1][i2][j2-1]); //(左,上),(左,左)
f[i][j][i2][j2]=max(t1,t2)+g[i][j]; //走到当前点
if(i!=i2||j!=j2)
{
f[i][j][i2][j2]+=g[i2][j2]; //如果不是同一个点
}
}
}
}
}
cout<<f[n][n][n][n];
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int f[N][N][N][N];
int g[N][N];
int main()
{
int n;
cin>>n;
int a,b,c;
while(cin>>a>>b>>c,a&&b&&c) //读入点
{
g[a][b]=c;
}
memset(f,0xcf,sizeof f);
f[0][1][0][1]=0; //起点
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int i2=1;i2<=n;i2++)
{
for(int j2=1;j2<=n;j2++)
{
int t1=max(f[i-1][j][i2-1][j2],f[i-1][j][i2][j2-1]); //(上上),(上,左)
int t2=max(f[i][j-1][i2-1][j2],f[i][j-1][i2][j2-1]); //(左,上),(左,左)
f[i][j][i2][j2]=max(t1,t2)+g[i][j]; //走到当前点
if(i!=i2||j!=j2) f[i][j][i2][j2]+=g[i2][j2]; //如果不是同一个点
}
}
}
}
cout<<f[n][n][n][n];
return 0;
}