``` int a[N][N],info[N][N]; ll f[N][N]; int n,m,t; int main() { scanf("%d%d",&n,&m); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) scanf("%d",&a[i][j]); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) info[i][j] = 1e9; //回合初始化 //初始化迷宫边界,不能走边界 for(int i = 0; i <= n; i ++) f[i][0] = -1e9; for(int j = 0; j <= m; j ++) f[0][j] = -1e9; scanf("%d",&t); for(int i = 0; i < t; i ++) { int x,y,v; scanf("%d%d%d",&x,&y,&v); info[x][y] = v; } ll res = 0; f[0][1] = 0,f[1][0] = 0; for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) {//如果到达(i,j),回合数一定是i-1+j-1 if(i+j-2 >= info[i][j]) //在到达前或同一回合,变成墙壁 a[i][j] = -1e9; f[i][j] = max(f[i-1][j], f[i][j-1]) + a[i][j]; res = max(res, f[i][j]); //记录过程中最多的金币数 } printf("%lld",res); return 0; } ```初始化dp数组边界即可
点赞 评论

相关推荐

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