随笔分类 - 搜索
摘要:题意: 给你一个文本串,和一些模式串,每个模式串都有一个价值,让你选一些模式串来组成文本串,使获得的价值最大。每个模式串不止能用一次。思路: 多重背包,枚举文本串的每个位置和模式串,把该模式串拼接在当前位置,看下一个位置是否能得到更优值。但是,存在很多模式串不能拼在当前位置的,无效状态。所以可以...
阅读全文
摘要:题意: 有一些牛,每头牛有一个Si值,一个Fi值,选出一些牛,使得max( sum(Si+Fi) ) 并且 sum(Si)>=0, sum(Fi)>=0思路: 随便选一维做容量(比如Fi),另一维做价值,然后直接做01背包。 做的时候注意一下方向。 最后,在合法解里面找一下最优解就好了。代码...
阅读全文
摘要:好久没做题了,建图搞了好久…… 然后,判是否有多解的时候会把原来的答案覆盖掉…… 这里没注意,弄了一下午……代码: #include #include #include #include #include #include #include #include #include #include...
阅读全文
摘要:题意: 你在网上下载东西,一个文件存储在一段或者多段里面,问怎么选择能在规定的流量内下载最多的文件数量。每段的大小一样。思路: 习惯了做答案保存在DP数组里的题,做这种答案保存在下标里的题,转不过弯来。开始想过背包,但是一来内存不够,二来时间也不够。 其实是这样做的,dp[i][j][0/1]...
阅读全文
摘要:DP的方向真的很重要,这题做的时候死活想不出来,看了题解以后恍然大悟原来这么简单。题意: 有n层堆成金字塔状的球,若你要选一个球,你必须把它上面那两个球取了,当然也可以一个不取。求选的球最大的权值和。题解: 把原来的金字塔变换一下形式,转换成直角三角形的样子。假如原三角形是这样的:然后可以转...
阅读全文
摘要:题意: 给定n 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #includ...
阅读全文
摘要:思路: 因为是对称的,所以如果两段是对称的,那么一段的前缀和一定等于另一段的后缀和。根据这个性质,我们可以预处理出这个数列的对称点对。然后最后一个对称段是从哪里开始的,做n^2的DP就可以了。代码: 1 #include 2 #include 3 #include 4 #include ...
阅读全文
摘要:题意: 给你一个数,求在多少种不同的进制下这个数每一位都是3、4、5、6中的一个。思路: 搜索。枚举这个数在任意进制下的表示,判断是否合法。当数字只有3、4、5、6时,必定有无穷种。 因为数字太大,所以直接枚举必定会超时。 下面有两种剪枝的方法: 1. 先枚举最后一位的情况。 假设...
阅读全文
摘要:题意: 地图为长为n个单位长度的直线,每通过一个单位长度需要t秒。 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后格子造成y点伤害,蓝塔可以使通过单位长度的时间增加z秒。 让你安排塔的排列是造成的伤害最大。思路: 最开始想到dp,状态dp[i][r][g][b]表示:假设前i格...
阅读全文
摘要:经典的一个题,今天竟然写跪了……题意: 给你4个数字,让你判断是否能通过四则运算和括号,凑成24点。思路: 暴力枚举运算顺序和运算符。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #incl...
阅读全文
摘要:题意: 给你一个A数列,让你求一个单调递增的B数列(0 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12...
阅读全文
摘要:题意: 一个有n个数的排列,给你一些位置上数字的大小关系。求合法的排列有多少种。思路: 数字的大小关系可以看做是一条有向边,这样以每个位置当点,就可以把整个排列当做一张有向图。而且题目保证有解,所以只一张有向无环图。这样子,我们就可以把排列计数的问题转化为一个图的拓扑排序计数问题。 拓扑排序的...
阅读全文
摘要:做多校的时候遇见一个求拓扑排序数量的题,就顺便来写了一下。题意: 你有个朋友是KOF的狂热粉丝,他有一个对其中英雄的强弱比较,让你根据这些比较关系来给这些英雄排名。问一共有多少种排名方式。思路: 用dp[S]记录当前状态的数量。 S表示拓扑排序中当前阶段已经被排序的点的集合。然后就可以枚举当前排...
阅读全文
摘要:题意: Given a sequence a_1,a_2,...,a_n, if we can take some of them(each a_i can only be used once), and they sum to k, then we say this sequence is a ...
阅读全文
摘要:其实这个题我还不会,学长给了一个代码交上去过了,据说用到了一种叫做位压缩的技术,先贴代码吧,以后看懂了再来写#include #include #define M 30005#define SIZE 128#define WORDMAX 3200#define BIT 32char s1[M], s...
阅读全文
摘要:TSP问题,不懂就是每个点最多访问两次,最少访问一次。所以,我们可以用三进制来当做状态。这个题练习了一下三进制……0、1、2 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #...
阅读全文
摘要:以前做过这题,今天又写了一次,突然发现写了一个好漂亮的DFS……(是不是太自恋了 - -#)代码: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 typedef __int64 ll; 8 9 int n, m...
阅读全文
摘要:题意: 给你三个数A, B, C(没有前导0),但是其中某些位不知道。 问A+B=C成立有多少种情况。思路: 从最后一位往前推,枚举A, B的每一种情况,考虑进位和不进位两种情况。代码: 1 #include 2 #include 3 #include 4 5 using namespa...
阅读全文
摘要:题意: 给你一张地图,上面有一些岛和桥。你要求出最大的三角哈密顿路径,以及他们的数量。 哈密顿路:一条经过所有岛的路径,每个岛只经过一次。 最大三角哈密顿路:满足价值最大的哈密顿路。 价值计算分为以下三部分: 1. 所有点权的和。 2. 对于路径上任意两个连续的点(共...
阅读全文
摘要:题意: 有一个年级中7个班的n个学生。 一天,他们毫无顺序的站成一排。请计算最小的交换次数,使得 相同班的同学都站在一起。 (只有站在一起的人才能交换)思路: 如果知道班级的最终排列就能在很短的时间里,计算出所需的交换次数。那么,我们只需要枚举排列即可。 如果,a班的一个人要走到前面,那么,...
阅读全文

浙公网安备 33010602011771号