【codeforces 757D】Felicity's Big Secret Revealed
2017-10-04 18:44
531 查看
【题目链接】:http://codeforces.com/problemset/problem/757/D
【题意】
给你一个01串;
让你分割这个01串;
要求2切..n+1切;
对于每一种切法
所切成的各个部分的二进制,转成十进制之后;假设里面最大的数为m;
问1..m这些数字都出现的切法有多少种;
【题解】
可以算一下对于1个75位的数字来说;
最多只可能连续出现
从
1..20
你可以算一下1..20这20个数字的二进制形式恰好占74个;
不能再多一个数字了,因为21的二进制形式的长度肯定大于1啊;
所以写个状压DP;
f[i][j]
表示前i-1个位置是切的结果,第i个数字开始还没有被切,然后1..20这些数字数字被得到的状态为j的有多少种切法;
从i..n枚举切割点就好;
最后累加
f[i][2^j-1]
i∈[2..n+1],j∈[1..20]
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define mp make_pair #define ps push_back #define fi first #define se second #define rei(x) cin >> x #define pri(x) cout << x #define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii; typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1}; const int dy[9] = {0,0,0,-1,1,-1,1,-1,1}; const double pi = acos(-1.0); const int N = 110; const int M = (1<<20)+20; const int MOD = 1e9+7; int n,num ,f [M],ans; char s ; void add(int &a,int &b) { a = a+b; if (a>=MOD) a-=MOD; } int main() { //freopen("F:\\rush.txt","r",stdin); ios::sync_with_stdio(false); rei(n); rei((s+1)); rep1(i,1,n) { for (int j = i,k = 0;j <= n;j++) if ((k=(k<<1)+s[j]-'0')>20) break; else num[i][j] = k; } rep1(i,1,n) { f[i][0]++; rep1(j,0,(1<<20)-1) if (f[i][j]) rep1(k,i,n) if (num[i][k]) add(f[k+1][j|1<<(num[i][k]-1)],f[i][j]); } rep1(i,2,n+1) rep1(j,1,20) add(ans,f[i][(1<<j)-1]); pri(ans<<endl); //printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC); return 0; }
相关文章推荐
- Codeforces 757 D. Felicity's Big Secret Revealed 状压DP
- codeforces-757-B Bash's Big Day(简单题)
- 软件随想录(local.joelonsoftware.com/wiki)-2002年02月13日 揭露冰山般的秘密 - The Iceberg Secret, Revealed
- codeforces 757 B. Bash's Big Day
- 【jzoj3824】【codeforces RCC 2014 Warmup (Div. 1) D】【Big Problems for Organizers】【树】
- 【Codeforces 817 C. Really Big Numbers】+ 构造
- codeforces 757 C. Felicity is Coming!
- 【Codeforces 817C. Really Big Numbers】+ 二分
- Codeforces 757 C Felicity is Coming! 【STL+思维】
- Codeforces 757 C Felicity is Coming! 思维+STL
- Oracle buys Sun,Big 3 revealed
- Codeforces 190D Non-Secret Cypher
- CodeForces - 757C - Felicity is Coming!(思维)
- 【codeforces 791A】Bear and Big Brother
- codeforces 190D Non-Secret Cypher 双指针
- Codeforces-592C - The Big Race - 思维
- codeforces 190D Non-Secret Cypher(two pointers)
- 【Codeforces 757 C Felicity is Coming! 】+ 思维
- Codeforces 190D Non-Secret Cypher(尺取)
- Codeforces 190D Non-Secret Cypher【思维+RMQ+二分】