makrusak

1152-sort

Nov 18th, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <string>
  6. #include <string.h>
  7. #include <queue>
  8. #include <map>
  9. #include <set>
  10. #include <cmath>
  11. #include <sstream>
  12. #include <stack>
  13. #include <cassert>
  14.  
  15. #define pb push_back
  16. #define mp make_pair
  17. #define PI 3.1415926535897932384626433832795
  18. #define sqr(x) (x)*(x)
  19. #define forn(i, n) for(int i = 0; i < n; ++i)
  20. #define ALL(x) x.begin(), x.end()
  21. #define F first
  22. #define S second
  23. #define m0(x) memset(x,0,sizeof(x))
  24. #define m1(x) memset(x,-1,sizeof(x))
  25. #define CC(x) cout << (x) << "\n"
  26. #define pw(x) (1ull<<(x))
  27.  
  28. using namespace std;
  29. typedef long long ll;
  30. typedef unsigned long long ull;
  31. typedef long double ld;
  32. typedef pair<int,int> pii;
  33. const int INF = 2147483647;
  34. const ll LLINF = 9223372036854775807LL;
  35.  
  36. int n;
  37. int a[30];
  38. int mi = INF;
  39. int sum = 0;
  40.  
  41. void dfs(int g) {
  42.   if (sum==0) {
  43.     if (g<mi) mi=g;
  44.     return;
  45.   }
  46.   if (g>=mi) return;
  47.   int kill=0;
  48.   int a1, a2, a3;
  49.   int f1,f2,f3;
  50.   pii z[30];
  51.   for (int i=0;i<n;i++) {
  52.     z[i] = mp(a[i]+a[(i+1)%n]+a[(i+2)%n], i);
  53.   }
  54.   sort(z, z+n);
  55.   reverse(z, z+n);
  56.   for (int i=0;i<n;i++) {
  57.     f1 = z[i].S, f2 = (f1+1)%n, f3=(f1+2)%n;
  58.     a1 = a[f1], a2 = a[f2], a3 = a[f3];
  59.     a[f1]=0, a[f2]=0, a[f3]=0;
  60.     sum-=z[i].F;
  61.     dfs(g+sum);
  62.     a[f1] = a1, a[f2] = a2, a[f3] = a3;
  63.     sum+=z[i].F;
  64.   }
  65. }
  66.  
  67. int main() {
  68.   //freopen("input.txt", "r", stdin);
  69.   //freopen("output.txt", "w", stdout);
  70.   scanf("%d", &n);
  71.   for (int i=0;i<n;i++) {
  72.     scanf("%d", &a[i]);
  73.     sum+=a[i];
  74.   }
  75.   dfs(0);
  76.   printf("%d\n", mi);
  77.   return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment