链接

题意:

给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子序列有多少个。
数据范围:字符串长度1 <= n <= 1000

分析:

首先我们看题应该能想到用状压DP,那么我们考虑状态,我们用DP[i][j][k]表示当前状态i,j表示选取每个字符的状态,k表示以k字符结尾。

知道怎么用状态表示我们就解决了一大半的问题,之后我们看当前状态i与其前一状态i-1,的关系,首先肯定得满足我们要有当前字符这个状态,如果末尾字符与上一状态相同,那么我们肯定可以将这个字符直接加到上面去,如果不同,那么我们可以通过将这个字符当做左后一个字符,所以状态种就会把以前这个字符减去,
比较抽象,看着这两个状态转移的方程式就好了

末尾字符相等
dp[i][j][num]+=dp[i-1][j][k];
不同
dp[i][j][num]+=dp[i-1][j-(1<<num)][k];

当然我们看出每一个状态只与上衣状态有关那么我们就可以用滚动数组了。减少空间的损耗,还有就是,每次当前字符独自成一个串,所以每次开始之前要把其++。

ll dp[2][1024][10], n;
string str;
void solve()
{cin >> n;cin >> str;ll flag = 0;ll num = str[0] - 'A';dp[flag][1 << num][num] = 1;for(int i = 1; i < n; i++){flag ^= 1;for (int j = 0; j < 1024; j ++){for(int k = 0; k < 10; k ++){if(j & (1 << k)) ///从上个状态直接递归下来 末尾必须是kdp[flag][j][k] = dp[flag ^ 1][j][k];}}num = str[i] - 'A';dp[flag][1<<num][num] ++;for(int j = 0; j < 1024; j++){if(j & (1 << num)) //以j结尾{for(int k = 0; k < 10; k++){if(k == num) ///与当前结尾一样,直接加上上层的方案数dp[flag][j][num] += dp[flag ^ 1][j][k];else dp[flag][j][num] += dp[flag ^ 1][j - (1 << num)][k]; ///不同 那就让其转化过来,dp[flag][j][num] %= MOD;}}}}ll ans = 0;for(int j = 0; j < 1024; j++){for(int k = 0; k < 10; k++){ans += dp[flag][j][k];ans %= MOD;}}cout << ans << endl;
}

ABC 215 E - Chain Contestant (状压DP)相关推荐

  1. AtCoder Beginner Contest 215 E - Chain Contestant

    AtCoder Beginner Contest 215 E - Chain Contestant 给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子 ...

  2. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  3. YYHS-蜀传之单刀赴会(梦回三国系列T2)(最短路+状压dp)

    题目描述 [题目背景] 公元215年,刘备取益州,孙权令诸葛瑾找刘备索要荆州.刘备不答应,孙权极为恼恨,便派吕蒙率军取长沙.零陵.桂阳三郡.长沙.桂阳蜀将当即投降.刘备得知后,亲自从成都赶到公安(今湖 ...

  4. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

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

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

  6. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  7. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  8. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  9. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

最新文章

  1. 如何使用ggplot2绘制左右分布的柱状图
  2. 三十八、页面分配策略
  3. 从源码角度看Android系统Launcher在开机时的启动过程
  4. php建站静态,php网站如何生成静态
  5. uploadify.php 漏洞,PhotoStore “uploadify.php”任意文件上传漏洞
  6. 如何让两个安装程序setup共享同一个component—— installing shared files(version:installshield develop8.0)...
  7. Mac上使用Jenv管理多个JDK版本
  8. 简单的web框架(python)
  9. Facebook与MySpace实现即时通讯一体化
  10. 传言苹果或将ARM引入笔记本电脑;但是它为什么会呢?
  11. 虚拟机centos7.3不能启动
  12. 安卓手机鸿蒙系统怎么下载,华为鸿蒙系统来了:安卓系统会成为下一个“塞班”吗?...
  13. 流媒体RTMP协议解析
  14. 电路交换,报文交换和分组交换的区别?
  15. matlab 跳步循环,足球训练:每天10分钟挑战7天球感训练
  16. 【Word文稿】在Word中优雅地插入VScode颜色主题代码(高亮、背景、颜色、字体均完美)
  17. 【黑金视频连载】NIOS II视频教程(01)--软件安装
  18. webdriver+Chrome 设置代理
  19. 互联网金融数据分析指标【汇总】
  20. 怎样实现微信公众号点击菜单自动回复文字信息

热门文章

  1. iOS开发 - 正则表达式 RegexKitLite框架
  2. 智能合约及其web3共识机制
  3. java响应实体类封装
  4. 如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线
  5. 微信小程序登录报错接口异常处理方法汇总
  6. HTTP Error 500.19-Internal Server Error 错误解决方法 错误代码:0x80070003 YiShaadmin一沙框架
  7. 基于划分的聚类----K-means算法使用(R语言)
  8. [转载]打工辛酸路:我是一朵飘零的花之45
  9. 大驼峰命名法和小驼峰命名法
  10. dedecms建站问题集锦