求助,递归式写法,不知道什么问题 15pts
查看原帖
求助,递归式写法,不知道什么问题 15pts
438461
liu_chen_hao楼主2021/10/19 22:04

RT, 代码:

#include <bits/stdc++.h>
using namespace std;

const long long INF=-1e15;
long long n,m;
long long a[1005][1005];
long long f[1005][1005][3]; 
long long ans;

long long dfs(int ,int ,int );

int main()
{
	scanf("%lld%lld", &n, &m);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			scanf("%lld", &a[i][j]);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			f[i][j][0]=f[i][j][1]=f[i][j][2]=INF;
	printf("%lld\n", dfs(n,m,1));
  
	return 0;
}
long long dfs(int x, int y, int to)
{
	ans=INF;
	if(x==1 && y==1) return a[1][1];
	if(x<1 || y<1 || x>n || y>m) return INF;
	if(f[x][y][to]>INF) return f[x][y][to];
	
	if(to==0) ans=max(ans, max(dfs(x-1,y,0)+a[x][y],dfs(x,y-1,1)+a[x][y]));
	if(to==1) ans=max(ans, max(dfs(x-1,y,0)+a[x][y],max(dfs(x,y-1,1)+a[x][y],dfs(x+1,y,2)+a[x][y])));
	if(to==2) ans=max(ans, max(dfs(x+1,y,2)+a[x][y], dfs(x,y-1,1)+a[x][y]));
	return f[x][y][to]=ans;
}
2021/10/19 22:04
加载中...