YEZAELP

SMMR-092: Boss Room

Jun 8th, 2020 (edited)
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e3;
  5. const int INF = 2e9;
  6. int ar[N+10][N+10];
  7. int dp[N+10][N+10];
  8.  
  9. int cost(int i, int j){
  10.     return 5000 + i*500 - dp[i][j];
  11. }
  12.  
  13. int main(){
  14.  
  15.     int n, m;
  16.     scanf("%d%d", &n, &m);
  17.  
  18.     for(int i=1;i<=n;i++){
  19.         for(int j=1;j<=m;j++){
  20.             scanf("%d", &ar[i][j]);
  21.             dp[i][j] = INF;
  22.         }
  23.     }
  24.  
  25.     for(int j = 1; j <= m; j ++){
  26.         if(ar[1][j] >= 5000) continue;
  27.         dp[1][j] = ar[1][j];
  28.     }
  29.  
  30.     for(int i=2;i<=n;i++){
  31.         for(int j=1;j<=m;j++){
  32.             if(j > 1 and cost(i-1, j-1) - ar[i][j] > 0 and dp[i-1][j-1] != INF){
  33.                 dp[i][j] = dp[i-1][j-1] + ar[i][j];
  34.             }
  35.             if(j < m and cost(i-1, j+1) - ar[i][j] > 0 and dp[i-1][j+1] != INF and dp[i-1][j+1] + ar[i][j] < dp[i][j]){
  36.                 dp[i][j] = dp[i-1][j+1] + ar[i][j];
  37.             }
  38.             if(cost(i-1, j) - ar[i][j] > 0 and dp[i-1][j] != INF and dp[i-1][j] + ar[i][j] < dp[i][j]){
  39.                 dp[i][j] = dp[i-1][j] + ar[i][j];
  40.             }
  41.         }
  42.     }
  43.  
  44.     int mn = INF;
  45.     for(int j=1;j<=m;j++) mn = min(mn, dp[n][j]);
  46.  
  47.     if(mn == INF) printf("-1");
  48.     else printf("%d", mn);
  49.  
  50.     return 0;
  51. }
  52.  
Add Comment
Please, Sign In to add comment