50分求助
查看原帖
50分求助
1079444
andy2048楼主2024/7/6 15:47
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10010][10010],dp[1010][1010][10];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i =1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			dp[i][j][0] = 0x3f;
			dp[i][j][1] = 0x3f;
			dp[i][j][2] = 0x3f;
		}
	}
	dp[1][1][0] = a[1][1];
	dp[1][1][1] = a[1][1];
	dp[1][1][2] = a[1][1];
	for(int i=2;i<=n;i++)
	{
		dp[i][1][1] = dp[i -1][1][1] + a[i][1];
	}
	for(int j=2;j<=m;j++)
	{
		for(int i=1;i<=n;i++)
		{
			dp[i][j][0] = max(dp[i][j-1][1],max(dp[i][j-1][0],dp[i][j-1][2])) + a[i][j];
			if(i >= 2) dp[i][j][1] = max(dp[i-1][j][0],dp[i-1][j][1]) + a[i][j];
		}
		for(int i = n-1;i>=1;i--)
		{
			dp[i][j][2] = max(dp[i+1][j][0],dp[i+1][j][2]) + a[i][j];
		}
	}
	cout<<max(dp[n][m][0],max(dp[n][m][1],dp[n][m][2]));
	return 0;
}
2024/7/6 15:47
加载中...