Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <map>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <complex>
- #include <list>
- #include <climits>
- #include <cctype>
- #include <bitset>
- using namespace std;
- int N, k, mask, next;
- long long dp[31][1 << 3];
- void Search(int i){
- if(i == 3){
- dp[k + 1][next] += dp[k][mask];
- return;
- }
- if(mask & (1 << i)){
- Search(i + 1);
- return;
- }
- if(i + 1 < 3 && !(mask & (1 << (i + 1))))
- Search(i + 2);
- if(k + 1 < N){
- next ^= (1 << i);
- Search(i + 1);
- next ^= (1 << i);
- }
- }
- int main(){
- while(scanf("%d", &N) != EOF && N != -1){
- memset(dp, 0, sizeof dp);
- dp[0][0] = 1;
- for(k = 0; k < N; k++)
- for(mask = 0; mask < (1 << 3); mask++){
- next = 0;
- Search(0);
- }
- printf("%lld\n", dp[N][0]);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment