2017.7.27 bill的挑战 失败总结
做了两个状压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的挑战 失败总结相关推荐
- 2017.10.27 sue的小球 失败总结
这个题是论文题...说这个题之前先说一下关路灯 这两个题都有时间的限制,但都不能作为状态设计进去 关路灯那个题,由于要忽略时间的限制,所以对于一个区间省得最多,是不是就是最优解了呢 首先,就算你知道这 ...
- 2017.9.27 青蛙的约会 失败总结
这个题虽说是exgcd简单的应用,但这个题还是很能说明问题的 首先 exgcd 是求 ax+by=c 其中c是a和b的gcd,,注意没有模 所以应用它解决同余方程,是利用了两个数的几倍之 ...
- Visual Studio 2017启动x86的Android模拟器失败
Visual Studio 2017启动x86的Android模拟器失败 Visual Studio 2017默认提供多个Android模拟器.其中,x86模拟器运行较快.但是由于和Hyper-V服 ...
- [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
[BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- P2167 [SDOI2009]Bill的挑战
P2167 [SDOI2009]Bill的挑战 题意: 有n个长度一样的字符串,字符串的每一位是?或者确定的字母,,求与这 N 个串中的刚好 K 个串匹配的字符串 T 的个数 1<=N<= ...
- 程序员挑战电子厂之挑战失败,提桶跑路
文章目录 程序如何进入联想电子厂 故事背景 入职流程 兼职信息来源 第一天之旅 第二天之旅 挑战失败,提桶跑路 程序如何进入联想电子厂 故事背景 2021年7月13日,终于等到放假的这一天了,用一句经 ...
- 2017第27届中国华东进出口商品交易会(2017上海华交会)会刊(参展商名录)
2017第27届中国华东进出口商品交易会(2017上海华交会)会刊(参展商名录) 展会名称: 2017年第27届中国华东进出口商品交易会(上海华交会) 所属展馆: 上海新国际博览中心 开展时间: 20 ...
- 2017.9.27 可持久化并查集 失败总结
这个题目就是误导你的,据说zky用了rope..所以苦于用并查集强行持久的似乎不太好做 这个题可以根据并查集的原理只加启发式合并优化 这样就可以常数巨大.空间巨大的nlogn了 启发式合并的过程 对于 ...
最新文章
- 转载:JavaScript 的55个经典技巧
- 网站优化数据分析不建议你遗落这三点
- VISUAL STUDIO 2019 快捷键
- java中synchronized的用法详解
- SpringBoot_日志-指定日志文件和日志Profile功能
- Java对象的创建过程:类的初始化与实例化
- c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
- Random Forest随机森林概述
- UESTC1608 暑假集训
- 搭建你的持续集成server - CruiseControl step by step(1)
- [转载] python下载安装教程
- abp 基于api接口的页面内容提交
- <零售数据分析-Pandas> 通过环比销售和库存对产品进行分类
- 微信公众号唤起微信支付
- 树莓派开机自动运行python程序的方法
- 高阶面试官应掌握哪些面试技巧
- 为什么一提到苹果就想到乔布斯,蒂姆·库克的事迹你知道多少?
- 计算机增加一个硬盘怎么设置方法,电脑加硬盘【操作教程】
- Python:绘制数学图形
- 中企动力牵手七鑫易维 以眼球追踪技术剔除建站顽疾
热门文章
- opengl学习笔记(六)
- Catalan数表达式完整推导
- Windows+Android各类实用软件总结
- 从零开始学keras之使用预训练的卷积神经网络
- Manjaro下显卡相关的命令搜集
- eclipse安装Android模拟器genymotion及其插件
- CSDN开设博客专栏的方法
- UnhandledPromiseRejectionWarning报错send()的处理
- python如何让图片镜像翻转_如何用 Python 增量备份 Roam Research 笔记图片?
- c++引用另一个类的方法_转:关于A类,B类,C类IP地址的网段和主机数的计算方法...