动态规划7:Acwing 1027
作者:
总打瞌睡的天天啊
,
2024-10-14 22:55:26
,
所有人可见
,
阅读 1
// 该题本来想用贪心的思想过掉,但好像不太行,因此只能让俩条线同时出发
// f[][][][],x1+y1=x2+y2,可以优化为三维
//状态表示:f[k][i1][i2]
//状态转移:四种情况
//都初始化为0
#include<iostream>
#include<algorithm>
using namespace std;
const int N=15;
int map[N][N],f[N*2][N][N];
int main()
{
int n;
cin>>n;
int a,b,c;
while(cin>>a>>b>>c,a||b||c)
{
map[a][b]=c;
}
for(int k=2;k<=n+n;k++)
for(int i1=1;i1<=n;i1++)
for(int i2=1;i2<=n;i2++)
{
int j1=k-i1,j2=k-i2;
if (j1 >= 1 && j1 <= n && j2 >= 1 && j2 <= n)
{
int t=map[i1][j1];
if(i1!=i2)t+=map[i2][j2];
int &x=f[k][i1][i2];
x=max(x,f[k-1][i1-1][i2-1]+t);
x=max(x,f[k-1][i1-1][i2]+t);
x=max(x,f[k-1][i1][i2-1]+t);
x=max(x,f[k-1][i1][i2]+t);
}
}
cout<<f[n+n][n][n];
}