题意
有两种方块,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 }
原文地址:https://www.cnblogs.com/klaycf/p/9688355.html
时间: 2024-10-11 01:09:53