Alex_tz307

USACO 2018 February Contest, Gold Problem 3. Taming the Herd

Mar 31st, 2021
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("taming.in");
  7. ofstream fout("taming.out");
  8.  
  9. const int NMAX = 101;
  10. int N, a[NMAX], dp[NMAX][NMAX][NMAX];
  11.  
  12. void min_self(int &a, int b) {
  13.   a = min(a, b);
  14. }
  15.  
  16. void solve() {
  17.   fin >> N;
  18.   for (int i = 1; i <= N; ++i)
  19.     fin >> a[i];
  20.   for (int i = 0; i <= N; ++i)
  21.     for (int j = 0; j <= N; ++j)
  22.       for (int k = 0; k < N; ++k)
  23.         dp[i][j][k] = INF;
  24.   dp[1][1][0] = (a[1] != 0);
  25.   for (int i = 2; i <= N; ++i)
  26.     for (int b = 1; b <= N; ++b) {
  27.       for (int v = 0; v < i; ++v)
  28.         min_self(dp[i][b][0], dp[i - 1][b - 1][v]);
  29.       if (a[i] != 0)
  30.         ++dp[i][b][0];
  31.       for (int v = 1; v < i; ++v)
  32.         dp[i][b][v] = dp[i - 1][b][v - 1] + (a[i] != v);
  33.     }
  34.   for (int b = 1; b <= N; ++b) {
  35.     int ans = INF;
  36.     for (int v = 0; v < N; ++v)
  37.       min_self(ans, dp[N][b][v]);
  38.     fout << ans << '\n';
  39.   }
  40. }
  41.  
  42. void close_files() {
  43.   fin.close();
  44.   fout.close();
  45. }
  46.  
  47. int main() {
  48.   solve();
  49.   close_files();
  50.   return 0;
  51. }
  52.  
Advertisement
Add Comment
Please, Sign In to add comment