15pts蒟蒻求条
查看原帖
15pts蒟蒻求条
1237792
eman__ruoy楼主2025/7/28 16:07
#include <bits/stdc++.h>
#define int long long
using namespace std;
int dp[1005][1005],v[1005][1005],n,m,s,k;
signed main1(){
    cin>>n>>m>>s>>k;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>v[i][j];
            dp[i][j]=LONG_LONG_MIN;
        }
    }
    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 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++){
                dp[i][j]=max(dp[i][j],min(k,dp[i][j-1]+v[i][j]));
            }
            for(int j=m;j>=1;j--){
                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 16:07
加载中...