码迷,mamicode.com
首页 > 其他好文 > 详细

递推,求至少连续放置三个U的危险组合

时间:2018-09-21 20:49:30      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:close   ast   安全组   --   als   class   algo   fine   second   

题意

有两种方块,L和U,有至少三个连续的U称为危险组合,问有多少个危险组合

solution:

至少这个概念比较难求 ,所以转化为(1ll<<n)-安全组合

dp[n][i]表示前n个数里以i个U结尾的个数

递推方程

dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2];
dp[i][1]=dp[i-1][0];
dp[i][2]=dp[i-1][1];

 

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<cmath>
 6 #include<queue>
 7 #include<cstring>
 8 #define mp make_pair
 9 #define pb push_back
10 #define first fi
11 #define second se
12 #define pw(x) (1ll << (x))
13 #define sz(x) ((int)(x).size())
14 #define all(x) (x).begin(),(x).end()
15 #define rep(i,l,r) for(int i=(l);i<(r);i++)
16 #define per(i,r,l) for(int i=(r);i>=(l);i--)
17 #define FOR(i,l,r) for(int i=(l);i<=(r);i++)
18 #define eps 1e-9
19 #define PIE acos(-1)
20 #define cl(a,b) memset(a,b,sizeof(a))
21 #define fastio ios::sync_with_stdio(false);cin.tie(0);
22 #define lson l , mid , ls
23 #define rson mid + 1 , r , rs
24 #define ls (rt<<1)
25 #define rs (ls|1)
26 #define INF 0x3f3f3f3f
27 #define LINF 0x3f3f3f3f3f3f3f3f
28 #define freopen freopen("in.txt","r",stdin);
29 #define cfin ifstream cin("in.txt");
30 #define lowbit(x) (x&(-x))
31 #define sqr(a) a*a
32 #define ll long long
33 #define ull unsigned long long
34 #define vi vector<int>
35 #define pii pair<int, int>
36 #define dd(x) cout << #x << " = " << (x) << ", "
37 #define de(x) cout << #x << " = " << (x) << "\n"
38 #define endl "\n"
39 using namespace std;
40 //**********************************
41 const int maxn=30;
42 int n;
43 ll dp[35][3];
44 //**********************************
45 void Init()
46 {
47     cl(dp,0);
48     dp[1][0]=dp[2][2]=dp[1][1]=dp[2][1]=1;dp[2][0]=2;
49     FOR(i,3,30){
50         dp[i][0]=dp[i-1][0]+dp[i-1][1]+dp[i-1][2];
51         dp[i][1]=dp[i-1][0];
52         dp[i][2]=dp[i-1][1];
53 //        dd(i);dd(dp[i][0]);dd(dp[i][1]);de(dp[i][2]);
54     }
55 }
56 //**********************************
57 int main()
58 {
59     Init();
60     while(cin>>n,n){
61         ll ans=0;
62         ans=dp[n][0]+dp[n][1]+dp[n][2];
63         printf("%lld\n",(1ll<<n)-ans);
64     }
65     return 0;
66 }
View Code

 

 

递推,求至少连续放置三个U的危险组合

标签:close   ast   安全组   --   als   class   algo   fine   second   

原文地址:https://www.cnblogs.com/klaycf/p/9688355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!