Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sc(a) scanf("%d", &a)
- #define sc2(a, b) scanf("%d%d", &a, &b)
- #define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
- #define scs(a) scanf("%s", a)
- #define pri(x) printf("%d\n", x)
- #define prie(x) printf("%d ", x)
- #define mp make_pair
- #define pb push_back
- #define BUFF ios::sync_with_stdio(false);
- #define db(x) cerr << #x << " == " << x << endl
- #define f first
- #define s second
- typedef long long int ll;
- typedef long double ld;
- typedef pair<ll, ll> ii;
- typedef vector<int> vi;
- typedef vector<ii> vii;
- const int INF = 0x3f3f3f3f;
- const ll LINF = 0x3f3f3f3f3f3f3f3fll;
- const ld pi = acos(-1);
- const int MOD = 1e9 + 7;
- const int N=35;
- map < int, ll > memo[N][N][N][N];
- int n;
- ll solve(int pos, int quantos, int jah, int max2, int ultimo) {
- if(pos == n) return 1;
- if(memo[pos][quantos][max2][ultimo].count(jah))
- return memo[pos][quantos][max2][ultimo][jah];
- ll &mem = memo[pos][quantos][max2][ultimo][jah];
- for(int i=max2; i<=quantos+1; i++) {
- int aux2 = max2;
- for(int j=aux2; j<i; j++) {
- if(jah&(1<<j)) aux2 = j;
- }
- if(i > ultimo) {
- mem += solve(pos+1, quantos+1, jah|(1<<i), aux2, i);
- }
- else {
- mem += solve(pos+1, quantos, jah|(1<<i), aux2, i);
- }
- }
- return mem;
- }
- void clear() {
- for(int i=0; i<=n; i++) for(int j=0; j<=n; j++)
- for(int k=0; k<=n; k++) for(int l=0; l<=n; l++)
- memo[i][j][k][l].clear();
- }
- int main() {
- for(int i=1; i<=32; i++) {
- n = i;
- clear();
- printf("v[%d] = %lld;\n", i, solve(1, 0, 1, 0, 0));
- fflush(stdout);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement