题一·馅饼(HDU - 1176)
假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时小王站在5这个位置上,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问小王最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)
暴力
f[i][j]+=max(f[i+1][j-1],max(f[i+1][j+1],f[i+1][j]);
i是时间j是位置
题二(CodeForces - 474D)
而他的吃法非常奇特,他独创了两种吃蛋糕的办法:一、一次吃一整个蛋糕;二、一次吃k个蛋糕。那么,当蛋糕数量为x1到x2之间时,一共能有几种不同的吃法呢?由于答案很大,输出结果mod 1000000007的值
和爬楼梯差不多一个走1步2步一个走1步n步。
小于n都是1,等于n是2,剩下交给递推
f[i]=(f[i-1]+f[i-n])
(有坑不说了)
题三·水果(CodeForces - 366C)
有n个水果, 每个水果都有两个属性值ai表示美味程度, bi表示能量值, 现在要求选出一个或多个水果, 使得选出的水果的ai和与bi和的比例是k 问在这种清形可能出现的情况下ai的和最多是多少, 如果这样的情形不存在输出 -1
01背包可做,大概意思就是
变一下就是
int w=a[i]-k*b[i];
if(dp[i-1][j]<dp[i-1][j-w]+a[i])dp[i][j]=dp[i-1][j-w]+a[i];
k*b[i]有时是大于a[i]的
题四·括号染色(CodeForces - 149D)
有一个字符串 s. 这个字符串是一个完全匹配的括号序列. 每个括号只有三种情况,不上色,上红色,上蓝色.每对括号必须只能给其中的一个上色求满足条件的括号序列染色的方法数。
暴力四维数组,不会超时。
f [ i ] [ j ] [ l ] [ r ]
i是左括号颜色 j是右括号颜色 l是左括号序号 r是右括号序号,主要用l,r来dp,i,j来记录
假设一串括号
f【l】【r】就是f【l】【m1】*f【m2】【r】;
题五·回文串(CodeForces - 245H)
现有一个字符串 s = s1s2… s|s| of length |s|, 由小写字符组成. 现在有 q 次查询, 每次查询给两个整数 li, ri (1 ≤ li ≤ ri ≤ |s|). 每次查询你的程序要给出此字符串的子串 s[li… ri]有多少个回文串
单独的一个字符肯定是回文串然后f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]
如果f[ i ][ j ]自己也是的话还要加一。
题六·回文串(CodeForces - 432D)
给你一个长度为n的长字符串,“完美子串”既是它的前缀也是它的后缀,求“完美子串”的个数且统计这些子串的在长字符串中出现的次数
这是 kmp……