20分求助!
查看原帖
20分求助!
602932
NumberTrart楼主2022/10/7 17:53
#include<iostream>
using namespace std;
typedef long long ll;
const long long INF=9e18,MAXLL=9223372036854775807;
long long n,m;
long long a[1005][1005];
long long dp[1005][1005][3];
//dp[i][j][k]代表目前地点为(i,j)、上面[k==1?到达过:没有到达过]、下面[k==2?到达过:没有到达过]时的答案
ll max2(ll x,ll y)
{
    if(x>y) return x;
    return y;
}
ll max3(ll x,ll y,ll z)
{
    return max2(x,max2(y,z));
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%lld",a[i]+j);
    dp[1][1][0]=a[1][1];
    dp[1][1][1]=dp[1][1][2]=-INF;
    for(int i=1;i<=n;i++)
    {
        for(int j=(i==1?2:1);j<=m;j++)
            dp[i][j][0]=a[i][j]+max3(dp[i-1][j][0],dp[i-1][j][1],dp[i-1][j][2]);
        for(int j=(i==1?2:1);j<=m;j++)
            dp[i][j][1]=a[i][j]+max2(dp[i][j-1][0],dp[i][j-1][1]);
        for(int j=m;j>=(i==1?2:1);j--)
            dp[i][j][2]=a[i][j]+max2(dp[i][j+1][0],dp[i][j+1][2]);
    }
    printf("%lld\n",max3(dp[n][m][0],dp[n][m][1],dp[n][m][2]));
    return 0;
}

我觉得这段代码应该能AC,结果80%都WA了,QAQ

2022/10/7 17:53
加载中...