제출 #569915

#제출 시각아이디문제언어결과실행 시간메모리
569915SSRSFireworks (APIO16_fireworks)C++14
19 / 100
27 ms672 KiB
#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000;
int main(){
  int N, M;
  cin >> N >> M;
  vector<int> P(N + M), C(N + M);
  for (int i = 1; i < N + M; i++){
    cin >> P[i] >> C[i];
    P[i]--;
  }
  vector<vector<int>> c(N + M);
  for (int i = 1; i < N + M; i++){
    c[P[i]].push_back(i);
  }
  vector<vector<int>> dp(N + M, vector<int>(301));
  for (int i = N; i < N + M; i++){
    dp[i][0] = 0;
    for (int j = 1; j <= 300;  j++){
      dp[i][j] = INF;
    }
  }
  for (int i = N - 1; i >= 0; i--){
    for (int j : c[i]){
      vector<int> dp2(301, INF);
      for (int k = 0; k <= 300; k++){
        for (int l = 0; k + l <= 300; l++){
          dp2[k + l] = min(dp2[k + l], dp[j][k] + abs(C[j] - l));
        }
      }
      for (int k = 0; k <= 300; k++){
        dp[i][k] += dp2[k];
      }
    }
  }
  int ans = INF;
  for (int i = 0; i <= 300; i++){
    ans = min(ans, dp[0][i]);
  }
  cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...