想到最后一步放弃了,又看了一下其他大哥的讲解,奶奶个腿滴
#include <stdio.h>
int main(){
int n = 0,m = 0;
scanf("%d %d",&n,&m);
int arr[n][m];
int dp1[n][m];
int tmp = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
scanf("%d",&arr[i][j]);
dp1[i][j] = 0;
}
}
int i = 0;
int j = 0;
//逆向是核心1
for(i = n-1; i >= 0; i--){for(j = m-1; j >= 0; j--){
if(i == n-1 && j == m-1){
if(arr[i][j] >= 0){
dp1[i][j] = 1;
}
else{
dp1[i][j] = 1 - arr[i][j];
}
}
else if(i == n-1){
tmp = dp1[i][j+1] - arr[i][j];
dp1[i][j] = tmp > 1 ? tmp : 1;
}
else if(j == m-1){
tmp = dp1[i+1][j] - arr[i][j];
dp1[i][j] = tmp > 1 ? tmp : 1;
}
else{
//这里的判断条件是核心2
tmp = dp1[i+1][j] < dp1[i][j+1] ? dp1[i+1][j] : dp1[i][j+1];tmp = tmp - arr[i][j];
dp1[i][j] = tmp > 1 ? tmp : 1;
}
}
}
printf("%d",dp1[0][0]);
return 0;
}