做了两个状压dp,有点门路了

就是说一般状压dp都需要枚举前面的状态,然后利用插数的思想递推,一般想清楚转移就差不多了  ,它就是利用状态把等效的情况压在了一起,和位运算的优势来dp

这个题一开始老是想压每一个串的字符,但实际上2^50怎么也不行了,,

所以一定要看到15

既然是串数被压缩,那我们肯定不能枚举串了,我们应该想办法通过位置递推来完成压串的dp

对于每一个字符,我们需要知道每一个位置上能填的串的情况

这个题有一个匹配数,所以f存匹配的个数

注意到串的字符匹配位数有无序性(无论什么位置匹配,所有都匹配了就行)

所以就可以一并考虑,在每一个位置枚举所有可能填的字符,转移到下一阶段做起点

这个dp的独特之处就是利用字符的枚举构造T并同时筛掉每次枚举不合法的串

以前不合法的,之后一定不合法。

码:

#include<iostream>
#include<cstdio>
using namespace std;
#include<cstring>
#define P 1000003
int f[55][1<<16],pei[55][55],n,K,T,ans;
char str[55][55];
int main()
{scanf("%d",&T);while(T--){  ans=0;memset(pei,0,sizeof(pei));memset(f,0,sizeof(f));scanf("%d%d",&n,&K);for(int i=1;i<=n;i++)scanf("%s",str[i]+1);int len=strlen(str[1]+1);for(int i=1;i<=len;i++)for(int j=1;j<=26;j++)for(int k=1;k<=n;k++){if(str[k][i]=='?'||str[k][i]-'a'+1==j)pei[i][j]=pei[i][j]|(1<<(k-1));                } f[0][(1<<n)-1]=1;for(int i=0;i<len;i++)for(int k=0;k<=(1<<n)-1;k++)    if(f[i][k]) for(int j=1;j<=26;j++){  //cout<<"l";f[i+1][pei[i+1][j]&k]=(f[i+1][pei[i+1][j]&k]+f[i][k])%P;           }for(int i=0;i<=(1<<n)-1;i++){int k=i,js=0;while(k){if(k&1==1)js++;k>>=1;}if(js==K)ans+=f[len][i],ans%=P;}
printf("%d\n",ans);}} 

2017.7.27 bill的挑战 失败总结相关推荐

  1. 2017.10.27 sue的小球 失败总结

    这个题是论文题...说这个题之前先说一下关路灯 这两个题都有时间的限制,但都不能作为状态设计进去 关路灯那个题,由于要忽略时间的限制,所以对于一个区间省得最多,是不是就是最优解了呢 首先,就算你知道这 ...

  2. 2017.9.27 青蛙的约会 失败总结

    这个题虽说是exgcd简单的应用,但这个题还是很能说明问题的 首先   exgcd 是求   ax+by=c    其中c是a和b的gcd,,注意没有模 所以应用它解决同余方程,是利用了两个数的几倍之 ...

  3. Visual Studio 2017启动x86的Android模拟器失败

     Visual Studio 2017启动x86的Android模拟器失败 Visual Studio 2017默认提供多个Android模拟器.其中,x86模拟器运行较快.但是由于和Hyper-V服 ...

  4. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  5. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

  6. P2167 [SDOI2009]Bill的挑战

    P2167 [SDOI2009]Bill的挑战 题意: 有n个长度一样的字符串,字符串的每一位是?或者确定的字母,,求与这 N 个串中的刚好 K 个串匹配的字符串 T 的个数 1<=N<= ...

  7. 程序员挑战电子厂之挑战失败,提桶跑路

    文章目录 程序如何进入联想电子厂 故事背景 入职流程 兼职信息来源 第一天之旅 第二天之旅 挑战失败,提桶跑路 程序如何进入联想电子厂 故事背景 2021年7月13日,终于等到放假的这一天了,用一句经 ...

  8. 2017第27届中国华东进出口商品交易会(2017上海华交会)会刊(参展商名录)

    2017第27届中国华东进出口商品交易会(2017上海华交会)会刊(参展商名录) 展会名称: 2017年第27届中国华东进出口商品交易会(上海华交会) 所属展馆: 上海新国际博览中心 开展时间: 20 ...

  9. 2017.9.27 可持久化并查集 失败总结

    这个题目就是误导你的,据说zky用了rope..所以苦于用并查集强行持久的似乎不太好做 这个题可以根据并查集的原理只加启发式合并优化 这样就可以常数巨大.空间巨大的nlogn了 启发式合并的过程 对于 ...

最新文章

  1. 转载:JavaScript 的55个经典技巧
  2. 网站优化数据分析不建议你遗落这三点
  3. VISUAL STUDIO 2019 快捷键
  4. java中synchronized的用法详解
  5. SpringBoot_日志-指定日志文件和日志Profile功能
  6. Java对象的创建过程:类的初始化与实例化
  7. c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
  8. Random Forest随机森林概述
  9. UESTC1608 暑假集训
  10. 搭建你的持续集成server - CruiseControl step by step(1)
  11. [转载] python下载安装教程
  12. abp 基于api接口的页面内容提交
  13. <零售数据分析-Pandas> 通过环比销售和库存对产品进行分类
  14. 微信公众号唤起微信支付
  15. 树莓派开机自动运行python程序的方法
  16. 高阶面试官应掌握哪些面试技巧
  17. 为什么一提到苹果就想到乔布斯,蒂姆·库克的事迹你知道多少?
  18. 计算机增加一个硬盘怎么设置方法,电脑加硬盘【操作教程】
  19. Python:绘制数学图形
  20. 中企动力牵手七鑫易维 以眼球追踪技术剔除建站顽疾

热门文章

  1. opengl学习笔记(六)
  2. Catalan数表达式完整推导
  3. Windows+Android各类实用软件总结
  4. 从零开始学keras之使用预训练的卷积神经网络
  5. Manjaro下显卡相关的命令搜集
  6. eclipse安装Android模拟器genymotion及其插件
  7. CSDN开设博客专栏的方法
  8. UnhandledPromiseRejectionWarning报错send()的处理
  9. python如何让图片镜像翻转_如何用 Python 增量备份 Roam Research 笔记图片?
  10. c++引用另一个类的方法_转:关于A类,B类,C类IP地址的网段和主机数的计算方法...