Advertisement
vfonic

Untitled

Sep 6th, 2014
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cctype>
  3. #include <climits>
  4. #include <cmath>
  5. #include <cstdio>
  6. #include <cstdlib>
  7. #include <cstring>
  8. #include <iostream>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <string>
  16. #include <vector>
  17.  
  18. #define inf 1000000000
  19. #define MAXN 202
  20.  
  21. using namespace std;
  22.  
  23. int n;
  24. int a[MAXN];
  25. int sol;
  26. int dp[MAXN][MAXN][MAXN];
  27.  
  28. int deep(int dec_idx, int inc_idx, int unpainted_numbers, int idx) {
  29.     if (unpainted_numbers < sol) sol = unpainted_numbers;
  30.     if (dp[dec_idx][inc_idx][idx] != -1) return dp[dec_idx][inc_idx][idx];
  31.     if (idx == n) return unpainted_numbers;
  32.  
  33.     if (a[idx] < a[dec_idx]) {
  34.         dp[dec_idx][inc_idx][idx] = deep(idx, inc_idx, unpainted_numbers-1, idx+1);
  35.     }
  36.     if (a[idx] > a[inc_idx]) {
  37.         if (dp[dec_idx][inc_idx][idx] == -1)
  38.             dp[dec_idx][inc_idx][idx] = deep(dec_idx, idx, unpainted_numbers-1, idx+1);
  39.         else
  40.             dp[dec_idx][inc_idx][idx] = min(deep(dec_idx, idx, unpainted_numbers-1, idx+1), dp[dec_idx][inc_idx][idx]);
  41.     }
  42.  
  43.     if (dp[dec_idx][inc_idx][idx] == -1)
  44.         dp[dec_idx][inc_idx][idx] = deep(dec_idx, inc_idx, unpainted_numbers, idx+1);
  45.     else
  46.         dp[dec_idx][inc_idx][idx] = min(deep(dec_idx, inc_idx, unpainted_numbers, idx+1), dp[dec_idx][inc_idx][idx]);
  47.     return dp[dec_idx][inc_idx][idx];
  48. }
  49.  
  50. int main() {
  51.     a[MAXN-2] = inf;
  52.     a[MAXN-1] = -inf;
  53.     while (true) {
  54.         scanf("%d", &n);
  55.        
  56.         if (n == -1) return 0;
  57.  
  58.         for (int i = 0; i < n; ++i) {
  59.             scanf("%d", &a[i]);
  60.         }
  61.  
  62.         sol = n;
  63.         memset(dp, -1, sizeof dp);
  64.  
  65.         deep(MAXN-2, MAXN-1, n, 0);
  66.  
  67.         printf("%d\n", sol);
  68.     }
  69.    
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement