随笔分类 -  ---动态规划---

摘要:题目链接:hdu_3247_Resource Archiver 题意: 有n个资源串,m个病毒串,现在要将所有的资源串整合到一个串内,并且这个串不能包括病毒串,问最短的串长为多少 题解: 将资源串和病毒串都插入到AC自动机中,分别做好标记,然后用bfs求出0节点和所有资源串互相的最短距离,最后就是一 阅读全文
posted @ 2016-08-31 21:55 bin_gege 阅读(166) 评论(0) 推荐(0)
摘要:题目链接:hdu_3341_Lost's revenge 题意: 有n个模式串,一个标准串,现在让标准串重组,使得包含最多的模式串,可重叠,问重组后最多包含多少模式串 题解: 显然是AC自动机上的状态压缩DP,不过如果直接开404*500的数组显示开不下,所以这样要将状态hash一下,然后再DP,因 阅读全文
posted @ 2016-08-31 16:11 bin_gege 阅读(153) 评论(0) 推荐(0)
摘要:题目链接:hdu_2296_Ring 题意: 有m个字符串,每个字符串有一个价值,现在让你组成一个不超过n长度的字符串,使得价值最大 题解: 很明显是在AC自动机上的DP,设dp[i][j]表示当前长度为i,AC自动机上匹配到j这个节点的最大价值,这里要求字典序最小,处理的稍微复杂一点,具体看代码 阅读全文
posted @ 2016-08-30 21:24 bin_gege 阅读(151) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #369 (Div. 2) C. Coloring Trees 题意: 有n个树,每个树有一个颜色,如果颜色值为0,表示没有颜色,一共有m个颜色,第j种颜色涂第i棵树需要花费pij,颜色一样且相邻的分为一组 现在要将所有颜色为0的树涂上颜色,使得这些树恰好 阅读全文
posted @ 2016-08-30 16:49 bin_gege 阅读(196) 评论(0) 推荐(0)
摘要:题目链接:hdu_2825_Wireless Password 题意: 给你m个串,问长度为n至少含k个串的字符串有多少个 题解: 设dp[i][j][k]表示考虑到长度为i,第j个自动机的节点,含有k这个压缩状态的方案数,然后DP下去就行了 1 #include<bits/stdc++.h> 2 阅读全文
posted @ 2016-08-29 16:44 bin_gege 阅读(188) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #367 (Div. 2) C. Hard problem 题意: 给你一些字符串,字符串可以倒置,如果要倒置,就会消耗vi的能量,问你花最少的能量将这些字符串排成字典序 题解: 当时1点过头太晕了,看错题了,然后感觉全世界都会,就我不会,- -!结果就是 阅读全文
posted @ 2016-08-12 15:17 bin_gege 阅读(152) 评论(0) 推荐(0)
摘要:题目链接:hdu_5807_Keep In Touch 题意: 1004 Keep In Touch 考虑dp,设f[i][j][k]表示三个人分别在i,j,k时的方案数,直接转移是O(n^6)的。 于是考虑加维,设f[i][j][k][now]表示三个人分别在i,j,k,时,目前准备走now这个人 阅读全文
posted @ 2016-08-07 21:58 bin_gege 阅读(478) 评论(0) 推荐(0)
摘要:题目链接:hdu_5800_To My Girlfriend 题意: 给你n和物品和一个重量m,让你求 题解: To My Girlfriend 令dp[i][j][s1][s2]表示前i个物品填了j的体积,有s1个物品选为为必选,s2个物品选为必不选的方案数(0<=s1,s2<=2),则有转移方程 阅读全文
posted @ 2016-08-06 15:40 bin_gege 阅读(162) 评论(0) 推荐(0)
摘要:题目链接:hdu_5794_A Simple Chess 题意: 给你n,m,从(1,1)到(n,m),每次只能从左上到右下走日字路线,有k(<=100)的不能走的位置,问你有多少方案 题解: 画图可看到路线是一个杨辉三角的图,然后我们可以将对应的x,y转换到对应的点上,也可以吧杨辉三角看成一个平行 阅读全文
posted @ 2016-08-06 01:27 bin_gege 阅读(154) 评论(0) 推荐(0)
摘要:题目链接:hdu_5787_K-wolf Number 题意: 给你一个区间,让你找满足任意k个数位内都没有相同的数字的个数 题解: 因为k不大,就直接将当前pos的前k-1个数传进去就行了 1 #include<cstdio> 2 #include<cstring> 3 int dig[20],l 阅读全文
posted @ 2016-08-02 22:28 bin_gege 阅读(707) 评论(0) 推荐(0)
摘要:题目链接:hdu_5791_Two 题意: 给你两串数列,问你相同的子序列有多少个,要注意,可以重复,比如1 和1 1 1 ,相同的子序列为3个 题解: 就和求最长公共子序列差不多,只不过要全部加起来 下面是官方题解: Two: 水题。dp[i][j]表示A序列前i个数和B序列前j个数的相同子序列对 阅读全文
posted @ 2016-08-02 21:39 bin_gege 阅读(263) 评论(0) 推荐(0)
摘要:题目链接:hdu_5773_The All-purpose Zero 题意: 给你一串数,让你求LIS,不过这里的0可以改变为任意数 题解: 官方题解讲的很清楚 1010 The All-purpose Zero 0可以转化成任意整数,包括负数,显然求LIS时尽量把0都放进去必定是正确的。因此我们可 阅读全文
posted @ 2016-07-29 15:21 bin_gege 阅读(172) 评论(0) 推荐(0)
摘要:题目链接:hdu_5763_Another Meaning 题意: 一个文本串A,一个模式串B,如果文本串含有模式串B,那么就能组合成多种意思,如下: In the first case, “ hehehe” can have 3 meaings: “*he”, “he*”, “hehehe”. I 阅读全文
posted @ 2016-07-28 18:50 bin_gege 阅读(316) 评论(0) 推荐(0)
摘要:题目链接:hdu_5748_Bellovin 题意: 给你一个数列ai,设f(a1,a2,a3,..an)=(f1,f2,f3,...,fn),其中fi表示以ai结尾的最长递增子序列长度,注意:必须要包括ai,当时就是被这里坑了,这TM也太坑爹了 题解: 直接上nlogn的LIS算法,记录一下位置就 阅读全文
posted @ 2016-07-23 21:57 bin_gege 阅读(197) 评论(0) 推荐(0)
摘要:C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output C. Vacations time limit per 阅读全文
posted @ 2016-07-20 09:38 bin_gege 阅读(200) 评论(0) 推荐(0)
摘要:题目连接:hdu_2457_DNA repair 题意: 给你N个字符串,最后再给你一个要匹配的串,问你最少修改多少次,使得这个串不出现之前给的N的字符串 题解: 刚学AC自动机,切这题还真不知道怎么来DP,然后看了一下题解,需要在失败指针那里做文章,这里我们要将trie的每一个节点当作一个状态,然 阅读全文
posted @ 2016-07-15 14:45 bin_gege 阅读(155) 评论(0) 推荐(0)
摘要:题目连接:hdu_5555_Immortality of Frog 题意: 给你一个NxN的网格,第N行的每一列都有个青蛙,这些青蛙只会往上走,上帝会在每个膜中放一个长生不老的药,一共有N个膜,每个膜覆盖一些区间,如果这个区间恰好为N那么就是好膜,否则是坏膜,每个青蛙最多只能穿过10个坏膜,问全部青 阅读全文
posted @ 2016-07-12 16:15 bin_gege 阅读(350) 评论(0) 推荐(0)
摘要:题目连接:hdu_2159_FATE 题意:完全背包的题意 题解:把杀敌数看成背包的容量,维护一个经验的最大值,我是多开一维来记录最大的忍耐度,当然你也可以直接开一位,并记录忍耐度,最后扫一遍 1 #include<cstdio> 2 #include<cstring> 3 #define F(i, 阅读全文
posted @ 2016-07-11 19:54 bin_gege 阅读(159) 评论(0) 推荐(0)
摘要:题目连接:hdu_2844_Coins 题意:给你n个硬币的价值和对应的数量,问你从1到m有那些数能组合出来 题解:如果我们将硬币的价值看成一个物品的容量和价值,那么对应1-m,如果dp[i]==i,那么这个数就能组合出来,所以这题就变成了一个多重背包,多重背包可以分为完全和01背包,也可以直接用0 阅读全文
posted @ 2016-07-11 17:49 bin_gege 阅读(153) 评论(0) 推荐(0)
摘要:题目连接:hdu_2546_饭卡 题意:中文,不解释 题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace st 阅读全文
posted @ 2016-07-09 22:41 bin_gege 阅读(122) 评论(0) 推荐(0)