HDU 2825 位压缩
题意,,,给你 M 个字符去组成密码,密码的长度规定为 N,所组成的密码要求至少 含有 M 个字符里面的 K 个,字符可能包含,不能重复计算;
这个 有点难度;因为 M 很小,所以,可以用二进制来做,当然 内存可能会爆,如果不注意好的话; 上题是要不包含字符,而这题是要求包含字符,那么对应的每一个状态是不是又多了一维变量,每个状态包含了多少个字符,从 1~k --》
#include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> #define mod 20090717 using namespace std;struct date {date *next[26],*fail;int in,cnt; }tree[1221],*que[1221],*root; int N,M,P,tail,head,total; char dir[20][20];date *creat_node( ) {for( int i = 0; i < 26; i++ )tree[total].next[i] = NULL;tree[total].fail = NULL;tree[total].in = total;tree[total].cnt = 0;return &tree[total++]; }void inint( ) {tail = head = total = 0;root = creat_node();root->fail = root; }void insert( char *word,int i ) {date *temp = root;while( *word ){int k = *word - 'a';if( temp->next[k] == NULL )temp->next[k] = creat_node();temp = temp->next[k];word++;}temp->cnt |= (1<<i); }void build_AC( ) {que[tail++] = root;while( tail > head ){date *temp = que[head++];for( int i = 0; i < 26; i++ )if( temp->next[i] ){if( temp == root ) temp->next[i]->fail = root;else temp->next[i]->fail = temp->fail->next[i];temp->next[i]->cnt = temp->next[i]->cnt|temp->fail->next[i]->cnt|temp->cnt;que[tail++] = temp->next[i];}else {if( temp == root ) temp->next[i] = root;else temp->next[i] = temp->fail->next[i];}} }int map[1500]; void work( ) {for( int i = 0; i <= 1500; i++ )map[i] = map[i>>1] + (i&1); }int dp[27][121][1500]; void DP( ) {int i,j,k,l,pos,res;pos = (1<<M );for (i = 0; i <= N; ++i) for (j = 0; j < total; ++j) for (k = 0; k < (1<<M); ++k) dp[i][j][k] = 0; dp[0][0][0] = 1;for( i = 1; i <= N; i++ )for( j = 0; j <total; j++ )for( k = 0; k < pos; k++ ){if( dp[i-1][j][k] == 0 ) continue;int a = dp[i-1][j][k];for( l = 0; l < 26; l++ ){int b = tree[j].next[l]->in;int c = tree[j].next[l]->cnt;dp[i][b][k|c] = ( a + dp[i][b][k|c] )%mod;}}res = 0; for( i = 0; i < total; i++ )for( j = 0; j < pos; j++ )if( map[j] >= P )res = ( res + dp[N][i][j] )%mod;printf("%d\n",res); }int main( ) {work();while( scanf("%d%d%d",&N,&M,&P) != EOF ){if( N+M+P == 0 )break;inint();for( int i = 0; i < M; i++ )scanf("%s",&dir[i]),insert( dir[i],i );build_AC( );DP( );}return 0; }
转载于:https://www.cnblogs.com/wulangzhou/archive/2013/04/12/3016746.html
HDU 2825 位压缩相关推荐
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 4012(bfs+位压缩)
转载标记处:http://blog.csdn.net/kalilili/article/details/43560257 思路:每次涂色以后必有一个格子的颜色是最终的颜色,否则这次涂色根本没意义,所以 ...
- 22位压缩版UUID
package com.lym.order.util;import javax.xml.crypto.Data; import java.util.Base64; import java.util.D ...
- 高精度4位压缩法原理与实现
我们都知道 int类型占32bit 可表示范围: [-2147483648,2147483647] long long类型 64bit可表示范围:[-9223372036854775808,92233 ...
- HDU 3220 Alice’s Cube (09年上海区域赛水题(位压缩、逆向搜索、打表))
这道题是09年上海区域赛的A题,虽然很水,但是不能直接爆搜,直接爆搜要T.于是我们看到题目的要求是说当操作的步数大于3的时候就输出more,那么我们可以从终态枚举进行了三次操作所能达到的所有状态,这个 ...
- hdu 5067(状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...
- POJ1753 棋盘翻转(位压缩+广度优先搜索)
http://poj.org/problem?id=1753 题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色.游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四 ...
- HDU 1565 状态压缩
题意: 你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大.(n <= 20 ...
- hdu 1044 BFS(压缩图)+DFS
题意: 给你起点,终点,图上有墙有路还有宝物,问你在规定时间内能否能到终点,如果能问最多能捡到多少宝物. 思路: 看完这个题目果断 BFS+三维的mark ...
- HDU 1693(状态压缩 插头DP)
我们引用国家队2008年陈丹琦的大作--<基于连通性状态压缩的动态规划问题>,上面对于插头.轮廓线的概念有详细的解释,不再赘述. 我们使用一个三维数组,前两维表示所在的格子,后一维表示轮廓 ...
最新文章
- MiniGUI - UNIX Domain Socket 封装
- 爱国者强烈推荐:nanopiR1——你懂的功能,懂你的开发板
- 主键、唯一键与唯一索引的区别
- Ubuntu LXC
- javascript :得到上星期的这一天日期
- 汇总jQuery的61种选择器及示例
- 使用durid的ConfigFilter对数据库密码加密
- 以相关组为基础的3D物体识别
- php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数
- Hessian Matrix
- ubuntu学习日记--Lesson6:shell,bash,dash
- 数据挖掘10大算法(1)——PageRank
- HDU 1864 最大报销额(01背包)
- CentOS hgfs中没有共享文件夹
- python设计棋牌游戏
- 推荐几款屏幕录制工具(可录制GIF)
- 高通骁龙888开始被Linux内核5.12版正式支持
- 榜样的力量——清华大学大数据软件团队2020年度先进个人风采展示
- 音频信号处理——DTW
- c4d打开没反应_PS、AI、PR、AE、C4D零基础自学经验分享
热门文章
- 文件系统读写Linux文件系统损坏的修复技术Strut2教程-java教程
- DHTML【10】--Javascript
- anywhere随启随用的静态文件服务器
- redhat初始化yum源,使用阿里云yum源
- asp.net MVC Views-----Controller传递数据方法
- STM32学习笔记(十) CAN通讯测试(环回模式)
- 安卓奇葩问题之:返回按键监听,使Dialog不消失
- Java Script基础(一)
- java的几种对象(PO,VO,DAO,BO,POJO)解释(转)
- Javascript经典窍门