题意 中文
简单的多阶段决策DP 令p[0]=0 p[n]=l d[i]表示乌龟从起点到第i个加油站所需的最小时间 那么有d[i]=min(d[i],d[j]+t(j,i)) t(j,i)表示 在第j个加油站加满油 然后直接开到第i个加油站 当然第0个加油站是起点就不用加油了 这样推到最后d[n]就是乌龟所需的最小时间了
#include
#include
#...
分类:
其他好文 时间:
2014-08-18 20:32:42
阅读次数:
357
题意 判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c
本题有两种解法 DP或者DFS
考虑DP 令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个字符 值为0或者1 那么有d[i][j]=(d[i-1][j]&&a[i]==c[i+j])||(d[i][j-1]&&b[i]==c[i+j]) a,b的下标都是从1开始的 注意0的初始化...
分类:
其他好文 时间:
2014-08-18 09:17:03
阅读次数:
288
题意 老鼠在一个小镇吃奶酪 城镇可以看成一个n*n的矩阵 其中每个格子都有一定数量的奶酪mat[i][j] 老鼠从(0,0) 开始吃 而且下个吃的格子里的奶酪必须比上个格子多 老鼠只能水平方向或者垂直方向走 而且每次走的距离不能超过k 求老鼠最多能吃多少奶酪
起点是固定的 比较容易 直接记忆化搜索
令d[i][j]表示以(i,j)为终点的最优解 那么对于所有(i...
分类:
其他好文 时间:
2014-08-17 15:38:12
阅读次数:
221
// poj 1458 zoj 1733 最长公共子序列 DP #include #include #define N 1005using namespace std ;char s1[N],s2[N]; int dp[N][N];int max(int a,int b) { return a>b ...
分类:
其他好文 时间:
2014-08-17 11:44:02
阅读次数:
160
题意 有两行数a[n1] b[n2] 分别有n1 n2个数 当第一行一个数和第二行一个数相等时 他们就可以连起来 每个数只能连一个 求最有多少条线使得每条都至少有一条和它相交
令d[i][j]表示 a的前i个数和j的前j个数最多可以连接多少条
当a[i]==b[j]时 将们连起来是肯定不与其它线相交的 所以d[i][j]=max(d[i-1][j],d[i][j-1])
当a[i]!=b[j]时 如果可以在第一行找一个数x<i 第二行找一个数y<j 使得a[x]==b[j...
分类:
其他好文 时间:
2014-08-15 16:11:19
阅读次数:
261
一、简单的0,1背包问题
1、题目描述:有n个重量和价值分别为Wi,Vi的物品。从这些物品中挑选出总重量不超过W的物品,求所选方案中价值总和的最大值(注:在0,1背包问题中,每个物品只有一件,可以选择房或者不放)。
【分析】:对于这样的问题,首先我们可以用最简单容易想到的方法,将所有可能一一例举出来,找到最合适的。
对于函数rec(int i,int j)// 这里的 i 表...
分类:
其他好文 时间:
2014-08-13 19:06:47
阅读次数:
151
最大子矩阵是一种典型的dp问题。某种程度上说是最大连续子序列和问题的扩展。这里选取了两个HDU上的最大子矩阵和问题来解读。...
分类:
其他好文 时间:
2014-08-13 19:06:17
阅读次数:
168
最长上升子序列就是求给定序列的最长的递增序列,其中不要求序列的元素在原序列中保持连续。
为了方便理解,可以举个例子:
inta[] = {0,2,1,5,3,6,4,8,9,7}(数组下标从1开始)的一个最长的子序列1,3,4,7,9。
利用动态规划的思想,可以方便的求取这个解。
为了方便解释,我们定义dp(n)为长度为1至下标为n的最长子序列的长度(数组下标假设从1开始),{a[1],a...
分类:
其他好文 时间:
2014-08-13 14:55:17
阅读次数:
195
#include #include using namespace std;int dp[105][1005], w[105],v[105],T,M;int max(int x,int y){ return x>y?x:y; }void f( ){ int i,j; for (i=1; ...
分类:
其他好文 时间:
2014-08-12 21:55:54
阅读次数:
353
70 371 10069 11 2#include #include using namespace std;int dp[105][1005], w[105],v[105],T,M;int max(int x,int y){ return x>y?x:y; }void f( ){ ...
分类:
其他好文 时间:
2014-08-12 21:50:24
阅读次数:
299