全部评论 1

  • #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const ll N=5e2+10;
    ll a[N][N],n,m,k,dp[N][N][2][11],ans; 
    int main(){
    	freopen("y.in","r",stdin);
        freopen("y.out","w",stdout);
        cin>>n>>m>>k;
        for(int i=1;i<=n;i++){
        	for(int j=1;j<=m;j++){
        		cin>>a[i][j];
    		}
        }
        memset(dp,-1,sizeof(dp));
        dp[1][1][1][0]=dp[1][1][0][0]=a[1][1];
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			if(i==1&&j==1) continue;
    			for(int c=1;c<=k;c++){
    				if(dp[i][j-1][0][c-1]!=-1)
    				dp[i][j][0][c]=max(dp[i][j][0][c],dp[i][j-1][0][c-1]+a[i][j]);
    			}
    			for(int c=0;c<=k;c++){
    				if(dp[i][j-1][1][c]!=-1)
    				dp[i][j][0][1]=max(dp[i][j][0][1],dp[i][j-1][1][c]+a[i][j]);
    			}
    			for(int c=1;c<=k;c++){
    				if(dp[i-1][j][1][c-1]!=-1)
    				dp[i][j][1][c]=max(dp[i][j][1][c],dp[i-1][j][1][c-1]+a[i][j]);
    			}
    			for(int c=0;c<=k;c++){
    				if(dp[i-1][j][0][c]!=-1)
    				dp[i][j][1][1]=max(dp[i][j][1][1],dp[i-1][j][0][c]+a[i][j]);
    			}
    		}
    	}
    	ll ans=-1;
    	for(int i=1;i<=k;i++){
    		ans=max({ans,dp[n][m][0][i],dp[n][m][1][i]});
    	}
    	cout<<ans;
        fclose(stdin);
        fclose(stdout);
    	return 0;
    } 
    

    1周前 来自 广东

    0

热门讨论