80分求助
查看原帖
80分求助
251074
学习柯学楼主2022/10/4 16:10

代码如下

#include<iostream>
#include<math.h>
using namespace std;
long long n,m,a[1005][1005],f[1005][1005][2],i,j, b[1005][1005][2];
int main(){
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
		f[i][1][0]=a[i][1]+f[i-1][1][0];
		b[i][1][0]=1;
	}
	for(j=2;j<=m;j++)
	{
		for(i=1;i<=n;i++)
		{
			f[i][j][0]=-10005;
			if(b[i][j-1][0])
			{
				f[i][j][0]=max(f[i][j-1][0],f[i][j][0]);
				b[i][j][0]=1;
			}
			if(b[i][j-1][1])
			{
				f[i][j][0]=max(f[i][j-1][1],f[i][j][0]);
				b[i][j][0]=1;
			}
			if(b[i - 1][j][0])
			{
				f[i][j][0]=max(f[i - 1][j][0],f[i][j][0]);
				b[i][j][0]=1;
			}
			f[i][j][0]+=a[i][j];
		}
		for(i=n;i>=1;i--)
		{
			f[i][j][1]=-10005;
			if(b[i][j-1][0])
			{
				f[i][j][1]=max(f[i][j-1][0],f[i][j][1]);
				b[i][j][1]=1;
			}
			if(b[i][j-1][1])
			{
				f[i][j][1]=max(f[i][j-1][1],f[i][j][1]);
				b[i][j][1]=1;
			}
			if(b[i + 1][j][0])
			{
				f[i][j][1]=max(f[i + 1][j][1],f[i][j][1]);
				b[i][j][1]=1;
			}
			f[i][j][1]+=a[i][j];
		}
	}
	cout<<max(f[n][m][0],f[n][m][1]);
	return 0;
}
2022/10/4 16:10
加载中...