CSP2020JT4蒟蒻的代码似乎爆long long了
查看原帖
CSP2020JT4蒟蒻的代码似乎爆long long了
326060
MoYanzz楼主2021/2/8 22:11

rt,long long 版

__int128版

#include<bits/stdc++.h>
#define ll long long
#define int long long
#define il inline
#define gc getchar
using namespace std;
il ll rd(){
    ll p=0,f=1; char c=gc();
    while(c<'0'||c>'9'){if(c=='-') f=-1; c=gc();}
    while(c>='0'&&c<='9'){p=(p<<3)+(p<<1)+(c^48); c=gc();}
    return p*f;
}
ll n,m,a[1001][1001]={0},up[1001][1001]={0},dn[1001][1001]={0};
ll f[1001][1001]={0};
signed main(){
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    n=rd(),m=rd();
    memset(f,128,sizeof(f));
    memset(up,128,sizeof(up));
    memset(dn,128,sizeof(dn));
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            a[i][j]=rd();
        }
    }
    //预处理第一列 
    f[1][1]=a[1][1];
    for(int i=2;i<=n;++i){
        f[i][1]=f[i-1][1]+a[i][1];
    }
    for(int j=2;j<=m;++j){//按列枚举 
        for(int i=1;i<=n;++i){
            up[i][j]=max(up[i-1][j],f[i][j-1])+a[i][j];
        }
        for(int i=n;i>0;--i){
            dn[i][j]=max(dn[i+1][j],f[i][j-1])+a[i][j];
            f[i][j]=max(up[i][j],dn[i][j]);
    //      printf("%lld ",f[i][j]);
        }
    //  puts("");
    }
    printf("%lld",f[n][m]);
    return 0;
}

借鉴了第三篇题解的思路

2021/2/8 22:11
加载中...