Advertisement
NicholaSRR

Czão da Massa

Sep 23rd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define sc(a) scanf("%d", &a)
  4. #define sc2(a, b) scanf("%d%d", &a, &b)
  5. #define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
  6. #define scs(a) scanf("%s", a)
  7. #define pri(x) printf("%d\n", x)
  8. #define prie(x) printf("%d ", x)
  9. #define mp make_pair
  10. #define pb push_back
  11. #define BUFF ios::sync_with_stdio(false);
  12. #define db(x) cerr << #x << " == " << x << endl
  13. #define f first
  14. #define s second
  15. typedef long long int ll;
  16. typedef long double ld;
  17. typedef pair<ll, ll> ii;
  18. typedef vector<int> vi;
  19. typedef vector<ii> vii;
  20. const int INF = 0x3f3f3f3f;
  21. const ll LINF = 0x3f3f3f3f3f3f3f3fll;
  22. const ld pi = acos(-1);
  23. const int MOD = 1e9 + 7;
  24. const int N=35;
  25.  
  26. map < int, ll > memo[N][N][N][N];
  27. int n;
  28.  
  29. ll solve(int pos, int quantos, int jah, int max2, int ultimo) {
  30.     if(pos == n) return 1;
  31.  
  32.     if(memo[pos][quantos][max2][ultimo].count(jah))
  33.         return memo[pos][quantos][max2][ultimo][jah];
  34.  
  35.     ll &mem = memo[pos][quantos][max2][ultimo][jah];
  36.  
  37.     for(int i=max2; i<=quantos+1; i++) {
  38.         int aux2 = max2;
  39.         for(int j=aux2; j<i; j++) {
  40.             if(jah&(1<<j)) aux2 = j;
  41.         }
  42.  
  43.         if(i > ultimo) {
  44.             mem += solve(pos+1, quantos+1, jah|(1<<i), aux2, i);
  45.         }
  46.         else {
  47.             mem += solve(pos+1, quantos, jah|(1<<i), aux2, i);
  48.         }
  49.     }
  50.  
  51.     return mem;
  52. }
  53.  
  54. void clear() {
  55.     for(int i=0; i<=n; i++) for(int j=0; j<=n; j++)
  56.     for(int k=0; k<=n; k++) for(int l=0; l<=n; l++)
  57.         memo[i][j][k][l].clear();
  58. }
  59.  
  60.  
  61. int main() {
  62.     for(int i=1; i<=32; i++) {
  63.         n = i;
  64.         clear();
  65.         printf("v[%d] = %lld;\n", i, solve(1, 0, 1, 0, 0));
  66.         fflush(stdout);
  67.     }
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement