题目地址:Ural 1586
先定义一个prime三维数组来记录素数,若i*100+j*10+k为素数,则标记prime[i][j][k]为1,否则为0.这样对后面的处理很方便。
然后定义一个dp三维数组,dp[n][i][j]表示当前n位的十位数字为i,个位数字为j时的素数个数,这时候状态要从prime[k][i][j]为素数时转移过来,所以状态转移方程为:
if(prime[j][k][...
分类:
其他好文 时间:
2014-10-06 02:31:19
阅读次数:
175
之前没有怎么刷过dp的题,所以在此学习了~(感谢walala大神的思路,给了我很大的启发)也算是自己学习的另一种dp题型吧先贴上状态转移方程:if(a[i][j])f[i][j]=min(f[i-1][j],min(f[i][j-1],f[i-1][j-1]))+1 然后更新ans即可详细的解释一下...
分类:
其他好文 时间:
2014-10-04 11:24:56
阅读次数:
138
题意:n位长的01序列(0
题目链接:http://poj.org/problem?id=1953
——>>设dp[i][j]表示前 i 位中第 i 位为 j 时的序列数,则状态转移方程为:
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
因为对于相同的n,其结果是固定的,所以可以对一个n只计算一...
分类:
其他好文 时间:
2014-10-04 11:04:46
阅读次数:
143
题目地址:Ural 1353
定义dp[i][j],表示当前位数为i位时,各位数和为j的个数。
对于第i位数来说,总可以看成在前i-1位后面加上一个0~9,所以状态转移方程就很容易出来了:
dp[i][j]=dp[i][j]+dp[i][j-1]+dp[i][j-2]+.......+dp[i][j-9];
最后统计即可。
代码如下:
#include
#include
#incl...
分类:
其他好文 时间:
2014-10-04 00:13:25
阅读次数:
214
/*
状压dp
刚开始&写成&&看了好长时间T0T.
状态转移方程
dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);(第i行的第j个状态有上一行的第k个状态得到)
num[i][j]有两个功能,第一:判断第i行第j个状态是否合法
第二:判断第i行第j个状态的数目
*/
#include
#in...
分类:
其他好文 时间:
2014-10-03 00:44:43
阅读次数:
172
题意:F朵花(从左到右标号为1到F,1
——>>设dp[i][j]表示将前j种花放入前i个花瓶的最大好看度和,则状态转移方程为:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + nValue[j][i]);
时间复杂度:O(F * V)
#include
#include
using std::max;
const int MA...
分类:
其他好文 时间:
2014-10-02 23:37:03
阅读次数:
207
题目给n个字母,构成长度为m的串,总共有n^m种。给p个字符串,问n^m种字符串中不包含(不是子串)这p个字符串的个数。将p个不能包含的字符串建立AC自动机,每个结点用val值来标记以当前节点为后缀的字符串是否包含非法字符串(p个字符串中的任何一个)。状态转移方程:f(i, j) += f(i-1,...
分类:
其他好文 时间:
2014-10-02 22:46:33
阅读次数:
322
题意:一个R * C的矩阵(1
题目链接:http://poj.org/problem?id=1088
——>>设dp[i][j]表示从ij位置出发的最长路,则状态转移方程为:
dp[x][y] = max(dp[x][y], Dp(nNewX, nNewY) + 1);
时间复杂度:O(R * C)
#include
#include
#include
using std...
分类:
其他好文 时间:
2014-10-02 22:42:13
阅读次数:
213
题意:b(0
题目链接:http://poj.org/problem?id=1170
——>>已有b种物品,再将每种优惠分别看成一种新物品,剩下就是完全背包问题了。。
设dp[i]表示购买状态为 i 时的最少花费(关于购买状态:00032表示第0种物品买2个,第1种物品买3个),则状态转移方程为:
dp[i + product[j].nState] = min(dp[i + produc...
分类:
其他好文 时间:
2014-09-30 21:17:00
阅读次数:
243
题目描述:
给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。
分析:若暴力求解,需要O(n^3)时间,太低效,故使用动态规划。
设data[i]:第i个数据,dp[i]:以第i个数结尾的连续子序列最大乘积,
若题目要求的是最大连续子序列和,则易确定状态转移方程为:
dp[i]=max(data[i],dp[i-1]+data[i])(dp[i]为以第...
分类:
其他好文 时间:
2014-09-30 18:55:59
阅读次数:
141