文章列表
http://acm.hdu.edu.cn/showproblem.php?pid=2203
解题报告:由题目:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。移位循环,最多多循环循环一个s1的长度,因此我们可以把s1中的前n-1位直接添加到s1的后面,
如s1=AABCD,可以变为s1=AABCDAABC,这样就包含了所有的情况,然后循环遍历即可。
#include<cstdio>
#include<cstring>
using namespace std;
const i ...
http://acm.hdu.edu.cn/showproblem.php?pid=3336
解题报告:刚开始用的是暴力的方法,就是每次往next数组中加一个元素,然后再在整个数组中进行查找,虽然加了很多的优化,但是还是无限的TLE中。(拒绝暴力,另寻他路)。
直接用next数组的意义,不过这次的求解next的方法与上次有些不同,暂且叫作方法二吧:
void get_next()
{
int i=0,j=-1;
next[0]=-1;
while(i<n)
{
while(j>-1&&a[j]!=a[i])
{
...
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711
解题报告:一道比较简单的kmp题目,还是很佩服当初发明者个算法的一群人,怎么想到的next数组的写法,让我们这帮菜鸟反复理解其含义。不知道为什么这么写,但我们至少要理解next的含义。
首先:next[0]=-1 ,是我们规定的每个串的第一个值为-1;
其次: next[j]=-1,这儿有两种可能。
第一,第j个元素的值和第一个元素的值相等 且 J前面的k个元素与前1~k个元素不相等。
第二,前面的1~k个元素与j前面的k个元素相等,但是next[j]==nex ...
题目链接:http://poj.org/problem?id=3461
解题报告:字符串匹配关键是next数组不好理解。
参考资料写道
(1)next[0]= -1 意义:任何串的第一个字符的模式值规定为-1。(2)next[j]= -1 意义:模式串T中下标为j的字符,如果与首字符相同,且j的前面的1—k个字符与开头的1—k个字符不等(或者相等但T[k]==T[j])(1≤k<j)。如:T=”abCabCad” 则 next[6]=-1,因T[3]=T[6] (3)next[j]=k 意义:模式串T中下标为j的字符,如果j的前面k个字符与开头的k个字符相等,且T[j ...
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1158
解题报告:自我感觉这道题目的状态方程不太容易。
刚开始用一维的搞,这么也得不到正确答案,后来想有月份、人数,应该用二维的。
首先雇主要在第n月花钱最少,一定是在第n-1月花钱也是最少,一定具有最有子结构,可以想到动态规划;
如果第n个月的需要的人数比第n-1个月的多,则需要本月需要(need[n]-need[n-1])*hire+need[n]*salary的钱
如果第n个月的需要的人数比第n-1个月的少,则需要本月需要(need[n-1]-need[n])*fire ...
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081解题报告:求最大的矩阵和的问题,可以转化为最大连续子序列和的模型,只不过这个是一个二维的问题。如何转化是关键:我们可以把每一项变成前面多项的和,通过相减计算每个子矩阵。在求解的时候竖着求解,这样子问题就转换为1维求解最大连续子序列和的问题。给一组参考数据:4-3 -7 -1 -2-3 -4 -2 -5-3 -5 -2 -3-4 6 -3 -2参考代码:
#include<cstdio>
#include<cstring>
#include<algori ...