95pts蒟蒻求条(WA on #13)
查看原帖
95pts蒟蒻求条(WA on #13)
1237792
eman__ruoy楼主2025/7/28 17:02
#include <bits/stdc++.h>
#define int long long
using namespace std;
int dp[1005][1005],v[1005][1005],n,m,s,k;
inline long long read() {
    long long x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') { 
        if (ch == '-') f = -1; 
        ch = getchar(); 
    }
    while (ch >= '0' && ch <= '9') { 
        x = x * 10 + ch - '0'; 
        ch = getchar(); 
    }
    return x * f;
}
signed main1(){
    memset(dp,0xD0,sizeof dp);
    memset(v,0xD0,sizeof v);
    cin>>n>>m>>s>>k;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            v[i][j]=read();
        }
    }
    for(int i=1;i<=n;i++){
        dp[1][i]=s+v[1][i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(dp[i-1][j]>=0)dp[i][j]=max(dp[i][j],min(k,dp[i-1][j]+v[i][j]));
        }
        if(i==n)break;
        for(int j=1;j<=m;j++){
            if(v[i][j]+v[i][j+1]>0){
                if(v[i][j]>=0)v[i][j]=k;
                if(v[i][j+1]>=0)v[i][j+1]=k;
            }
        }
        for(int kt=0;kt<3;kt++){
            // cout<<i<<':'<<k<<' ';
            // for(int j=1;j<=m;j++){
            //     cout<<dp[i][j]<<' ';
            // }cout<<endl;
            for(int j=1;j<=m;j++){
                if(dp[i][j-1]>=0)dp[i][j]=max(dp[i][j],min(k,dp[i][j-1]+v[i][j]));
            }
            for(int j=m;j>=1;j--){
                if(dp[i][j+1]>=0)dp[i][j]=max(dp[i][j],min(k,dp[i][j+1]+v[i][j]));
            }
        }
    }
    int mx=INT_MIN;
    for(int i=1;i<=m;i++){
        mx=max(mx,dp[n][i]);
    }
    if(mx<0){
        cout<<-1<<endl;
    }else{
        cout<<mx<<endl;
    }
    return 0;
}
signed main(){
    int t;cin>>t>>t;
    while(t--)main1();
    return 0;
}
2025/7/28 17:02
加载中...