题目大意:给定n个数字,求这些数字的全排列中有多少数能被d整除
令f[i][j]为状态为i,余数为j的方案数
枚举最高位转移
小心爆int
#include
#include
#include
#include
using namespace std;
int n,d,ans,f[1<<10][1<<10],digit[1<<10],tens[10],cnt[10],factorial[1...
分类:
其他好文 时间:
2014-10-16 10:38:52
阅读次数:
131
给出一行字符串,每次可以删去一个回文子串,子串可以是不连续的,因此用状压比较好模拟,求删掉整个字符串需要的最少步数。
字符串的最大长度为16,因此不能逐行枚举状态,首先预处理出来所有的的回文子串,然后从第一步开始,依次状压第i步能到达的状态,如果能达到母串,跳出。
还有初始化不要用图省事用memset。。不优越的姿势+函数导致T了数发。
#include
#include
#includ...
分类:
其他好文 时间:
2014-10-16 00:09:27
阅读次数:
231
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5025题目大意: 迷宫中孙悟空救唐僧,可以走回头路。必须收集完钥匙,且必须按顺序收集。迷宫中还有蛇,杀蛇多耗时1,蛇杀完就没了。问最少耗时。解题思路:2014广州网赛的水题之一。当时没刷过BFS状压,结果...
分类:
其他好文 时间:
2014-10-15 20:15:01
阅读次数:
220
题意:
给n,m,k ,再给出m个单词
问长度为n的字符串,至少在m个单词中含有k个的组成方案有多少种。
思路:
由于m最大是10,所以可以采取状压的思想
首先建立trie图,在每个单词的结束节点标记一个mark=(1
然后需要注意的,对于每个节点,应该顺着fail指针遍历一遍,
把所有的mark取一个并集。
因为就是如果单词出现包含的话,比如 she和he 我拿了she,其实等于...
分类:
其他好文 时间:
2014-10-15 15:00:00
阅读次数:
176
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙。解题思路:要是没有门和钥匙,而且不能走回头路,就是个简单粗暴的BFS。有了门之后,就要状态压缩+记忆化搜索。不然这个图会搜...
分类:
其他好文 时间:
2014-10-15 14:50:00
阅读次数:
168
http://acm.hdu.edu.cn/showproblem.php?pid=1074状压dp不是很懂,看着别人的代码写的,很长时间才看懂。 dp[i]记录(1 2 #include 3 #include 4 #define maxn 16 5 using namespace std; 6.....
分类:
其他好文 时间:
2014-10-15 00:04:39
阅读次数:
170
题目大意:有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得成功获得魔法球的人可以再次取求二者都进行最优策略之后两人所得魔法球个数差分析:博弈,数据很小,自然想到了可以搜索所有状态然后从每一步的子状态中...
分类:
其他好文 时间:
2014-10-14 23:48:49
阅读次数:
172
感觉这道题目的数据比较水啊,程序的时间复杂度为1711^2*20竟然也可以过掉。。。。其他的就是状压了啊,注意需要滚动一下啊。。。。
方格取数(1)
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5701 Acce...
分类:
其他好文 时间:
2014-10-14 00:42:57
阅读次数:
303
题目大意:给定n*n的国际象棋棋盘,在上面放k个国王,要求国王之间互不攻击,求方案数
n
状压DP,将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数,然后状态转移如下:
f[i][j][k]=Σf[i-1][j-digit[k]][l]
其中l&k=0,l>>1&k=0,l
暴力转移即可
记得开long long
#include
#inc...
分类:
其他好文 时间:
2014-10-13 16:30:09
阅读次数:
221
题目大意:给定一个n个点的有向图,求有多少点对(x,y),使x沿边可到达y
设f[i][j]为从i到j是否可达
首先强联通分量中的任意两个点均可达 于是我们利用Tarjan缩点
缩点之后是一个拓扑图,我们求出拓扑序,沿着拓扑序从后向前DP,状态转移方程为:
f[i][k]=or{ f[j][k] } (i有直连边到达j,1
鉴于每个点的值只会是1或者0,所以我们可以直接状压,或者干脆开b...
分类:
编程语言 时间:
2014-10-13 15:51:39
阅读次数:
157