传纸条

题目:P1006 [NOIP2008 提高组] 传纸条 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一道绿题,与P1004基本相同

题目要求两条路径上好感度的总和

该不会真有人走了个来回吧。。。(比如一开始的我QAQ)

然后鄙人猛然醒悟,醍醐灌顶

双向dp啊大锅,我在想什么啊。。。

(我就是个sb)

本体状转方程(三维):max(ot[k-1][i][j],tot[k-1][i-1][j-1],tot[k-1][i][j-1],tot[k-1][i-1][j])

代码:

#include<iostream>
#define ll long long
using namespace std;
const int MAXN=55;
int gh[MAXN][MAXN];
int tot[2*MAXN][MAXN][MAXN],x,y;
int i=1,j=1,k=2;
ll moremax(ll a,ll b,ll c,ll d)
{
a=max(a,b);
a=max(a,c);
a=max(a,d);
return a;
}
int main()
{
cin>>x>>y;
for(i=1;i<=x;i++)
{
for(j=1;j<=y;j++)
{
cin>>gh[i][j];
}
}
i=1;
j=1;
tot[1][1][1]=0;
for(k=2;k<=x+y-1;k++)
{
for(i=1;i<=x&&i<=k;i++)
{
for(j=1;j<=x&&j<=k;j++)
{
if(j==1&&i==1)
continue;
tot[k][i][j]=moremax(tot[k-1][i][j],tot[k-1][i-1][j-1],tot[k-1][i][j-1],tot[k-1][i-1][j]);
tot[k][i][j]+=i==j?gh[i][k-i+1]:gh[i][k-i+1]+gh[j][k-j+1];
}
}
}
cout<<tot[x+y-1][x][x]<<endl;
return 0;
}

posted @ 2022-07-22 16:10  神佑我帅肖  阅读(124)  评论(0)    收藏  举报