来自蒟蒻的求助
查看原帖
来自蒟蒻的求助
243961
Colead楼主2021/10/2 22:24

rt,样例不过,求调。

#include<bits/stdc++.h>
using namespace std;
long long f[1005][1005][3]={};
long long w[1005][1005]={};
#define INF -1e9
long long n,m;
long long dfs(long long x,long long y,long long from)//0:up,1:down,2:left
{
	if(x<1||x>n||y>m||y<1)return INF;
	if(f[x][y][from]!=INF)return f[x][y][from];
	if(from==2)
	{
		f[x][y][from]=max(dfs(x-1,y,0),max(dfs(x-1,y,1),dfs(x-1,y,2)))+w[x][y];
	}
	if(from==1)
	{
		f[x][y][from]=max(dfs(x,y+1,1),dfs(x,y+1,2))+w[x][y];
	}
	if(from==0)
	{
		f[x][y][from]=max(dfs(x,y-1,0),dfs(x,y-1,2))+w[x][y];
	}
	//cout<<f[x][y][from]<<endl;
	return f[x][y][from];
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>w[i][j];
			f[i][j][0]=f[i][j][1]=f[i][j][2]=INF;
		}
	}
	f[1][1][1]=f[1][1][0]=f[1][1][2]=w[1][1];
	long long ans=max(dfs(n,m,0),dfs(n,m,2));
	cout<<ans<<endl;
	return 0;
}
2021/10/2 22:24
加载中...