题解 | 收集金币

收集金币

https://www.nowcoder.com/practice/bde230df252c4b41a059c9b06fcf65b6

#include<bits/stdc++.h>
using namespace std;
int inn[1005][1005];
#define int long long //这题没想到要开长整型弄半天

void solve() {
    int n,m;cin>>n>>m;
    vector<vector<int>>a(n+1,vector<int>(m+2,0));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) cin>>a[i][j];
    }
    vector<vector<int>>dp(n+1,vector<int>(m+1,-1e9));//给个非常大的负数,模拟无法达到的情况
    int t;cin>>t;
    while(t--){
        int x,y,v;cin>>x>>y>>v;
        inn[x][y]=v;
    }
    dp[1][1]=a[1][1];//一定要拎出来否则如果起点变成墙就会改变起点dp的值(变成-1e9),之前一直放在循环里导致一直无法AC
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==1&&j==1) continue;
            if(inn[i][j]>0&&inn[i][j]<=i+j-2) a[i][j]=-1e9;
            dp[i][j]=max(dp[i][j-1],dp[i-1][j])+a[i][j];
        }
    }
    int max_dp=0;//把所有负值抛弃
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++) max_dp=max(max_dp,dp[i][j]);//求最大dp也要拎出来,如果也放在循环里就会把本该走不通的地方变成好像能走通的地方
    }
    cout<<max_dp;
}

全部评论

相关推荐

02-05 17:50
已编辑
武汉工程科技学院 Java
点赞 评论 收藏
分享
01-27 15:41
门头沟学院 Java
想躺平的菜鸡1枚:我项目比你难、学历比你好、还有SCI论文,投java都被拒一大片,现在基本上都要问点agent开发
软件开发投递记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务