原题地址

题解

算法复杂度 \(O(2^{n}*len*log_2(len))\)

dp[i][S] 表示在第 \(i\) 个数后状态为 \(S\) 的时候的方案数.
num[i][j] 表示 \(i\) 到 \(j\) 组成的数字.

①首先预处理出 num[i][j] 根据 \(len<=75\) 得出 \(max<=20\)
\(len_{max}<=5\) 所以 \(j-i<=5\);

②通过 \(len\) 计算出 \(n\)

③状态转移方程
\[dp[j][S|(1<<num[i][j]-1)+=dp[i][S];\]

④初值为
dp[i][0]=1 其中 \(i\) 为 \(1 \to n-1\)

⑤计算 bin[] 数组
\(bin[i]=2^i-1\)

⑥\[ans=\sum_{j=0}^n dp[bin[i]][j]\]

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=80,mod=1e9+7;
int n;
int x[maxn],num[maxn][maxn],limit=0;
int dp[76][(1<<20)+5];
int bin[22];
void readn()
{getchar();for(int i=1;i<=n;i++)x[i]=getchar()-'0';
}
void get_01()
{for(register int i=0;i<=n-1;i++)for(register int j=i+1;j<=n;j++){int temp=1;for(register int k=j;k>=i+1;k--){num[i][j]+=x[k]*temp;temp*=2;if(num[i][j]>22)break;}}
}
int main()
{int temp=2;for(int i=1;i<=21;i++){bin[i]=temp-1;temp=temp*2;}limit=20;scanf("%d",&n);readn();get_01();for(register int i=0;i<=n;i++)dp[i][0]=1;for(register int j=0;j<=n-1;j++)for(register int i=0;i<=(1<<limit)-1;i++){if(!dp[j][i]) continue;for(register int k=j+1;k<=n;k++){if(num[j][k]>limit)break;if(num[j][k]==0)continue;dp[k][i|(1<<num[j][k]-1)]=(dp[k][i|(1<<num[j][k]-1)]+dp[j][i])%mod; }}int sum=0;for(register int i=1;bin[i]<=(1<<limit)-1;i++)for(register int j=0;j<=n;j++){sum+=dp[j][bin[i]];sum%=mod;}printf("%d\n",sum);
}

转载于:https://www.cnblogs.com/Harry-bh/p/8758998.html

Felicity's Big Secret Revealed codeforces 757D(状压DP)相关推荐

  1. CodeForces 11D(状压DP 求图中环的个数)

    Given a simple graph, output the number of simple cycles in it. A simple cycle is a cycle with no re ...

  2. Codeforces 757D - Felicity's Big Secret Revealed

    757D - Felicity's Big Secret Revealed 题目大意:给你一串有n(n<=75)个0或1组成的串,让你划最多n+1条分割线,第一条分割线的前面和最后一条分割线的后 ...

  3. 【codeforces 757D】Felicity's Big Secret Revealed

    [题目链接]:http://codeforces.com/problemset/problem/757/D [题意] 给你一个01串; 让你分割这个01串; 要求2切..n+1切; 对于每一种切法 所 ...

  4. Codeforces Gym 100676G Training Camp 状压dp

    http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...

  5. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

  6. CodeForces - 1550E Stringforces(二分+状压dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...

  7. Codeforces Beta Round #8 C. Looking for Order 状压dp

    题目链接: http://codeforces.com/problemset/problem/8/C C. Looking for Order time limit per test:4 second ...

  8. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  9. Codeforces ----- Kefa and Dishes [状压dp]

    题目传送门:580D 题目大意:给你n道菜以及每道菜一个权值,k个条件,即第y道菜在第x道后马上吃有z的附加值,求从中取m道菜的最大权值 看到这道题,我们会想到去枚举,但是很显然这是会超时的,再一看数 ...

最新文章

  1. 聚类(Clustering)定义、聚类思想及形式、距离的度量
  2. mysql基础搭建_MySql基础-构建MySql数据库:安装MySql-server、MySql-client
  3. 逻辑回归损失函数(cost function)
  4. python画椭圆-Python易学就会(五)turtle绘制椭圆与递归
  5. SQL删除一个数据库内所有表的数据保留表结构
  6. js函数中的参数的个数
  7. 代码: 0x80131500_微软应用商店错误代码“0x80131500”怎么修复?
  8. 云顶之弈机器人法爆_云顶之弈:六法机器人强势来袭,输出爆炸,网友:吃鸡必备...
  9. 将openstack的Token认证信息存储在memcache中
  10. 【转】DCM(DICOM)医学影像文件格式详解
  11. 智慧城市排名出炉 拉动安防产业向前进
  12. html计算天数,Javascript实现简易天数计算器
  13. linux运维服务常见故障,linux常见故障处理
  14. C++基础篇之抽象类的接口
  15. ACL2020 | 什么时候值得用BERT上下文嵌入
  16. 0028-如何在CDH未启用认证的情况下安装及使用Sentry
  17. 正本清源:LBS(基于位置服务)技术——高精准IP地址定位的8大误区(上)
  18. jquery 3D旋转banner图效果 demo
  19. java计算机毕业设计考试编排管理系统源码+mysql数据库+系统+lw文档+部署
  20. linux mint 19界面美化,Linux Mint19字体、主题美化

热门文章

  1. FPGA AD_TLC549 芯片开发 学习笔记
  2. gopro剪辑_如何延长GoPro的电池寿命
  3. 三国杀online网页版服务器更新,[OL][公告] 4月15日《三国杀OL》版本更新公告
  4. wave文件格式详解
  5. Word加载项/插件管理
  6. [附源码]Nodejs计算机毕业设计小区租售管理模块设计与实现Express(程序+LW)
  7. 网人-鸟哥的Linux私房菜简体中文
  8. 5款超级简单的IP流量监控工具
  9. 怎么在桌面上显示计算机编号,敬业签Windows电脑桌面云便签怎么添加序号?
  10. 淘宝网最佳实践之ABS自动编译