假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max来表示以a结尾的最大连续子串的乘积值,用Min表示以a结尾的最小的子串的乘积值,那么状态转移方程为:Max=max{a, Max[i-1]*a, Min[i-1]*a};Min=min{a, Max[i-1]*a, Min[...
分类:
其他好文 时间:
2014-09-09 21:21:09
阅读次数:
220
思路:这道题是数塔模型的一种变形。首先,我们会看到,随着时间的不同,落下馅饼的位置也会不同,那么我们会考虑到,我们想到第i个点去接馅饼时候,会发现这时我们拥有的馅饼数量是(即状态转移方程):dp[当前时间][当前位置]+=dp[当前时间-1][上一个位置(细致思考会发现有3个位置)]所以AC代码:#...
分类:
其他好文 时间:
2014-09-06 19:55:43
阅读次数:
218
比较水的动态规划
dp[i][j] 将原串 i ~ j 之内的字符转化为回文字符所需要的最小操作次数
其中删除操作和添加操作本质上是一样的。
三个状态转移方程:
dp[i][j] = min(dp[i][j] ,dp[i + 1][j]);
dp[i][j] = min(dp[i][j] ,dp[i + 1][j - 1]);
dp[i][j] = min(dp[i][j] ,dp...
分类:
其他好文 时间:
2014-09-04 19:05:40
阅读次数:
189
链接:http://poj.org/problem?id=1155
题意:电视台转播一场重要的足球比赛,以这个转播机器为根建立一棵“转播树”,数中一共有N个(N
思路:从叶到根依次记录当前结点可以满足的观看要求的数量,并且记录满足该数量的最多收益,即对每个结点进行背包DP,保证每次决策的最优化。
状态转移方程:dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k]...
分类:
其他好文 时间:
2014-09-04 17:05:27
阅读次数:
213
编程之美上的题目,是一道dp的题目,设dp[i][v]表示是否可以找到i个数,使得他们的和为v,是的话,dp[i][v]=1,否则为0。状态转移方程:dp[i][v]=dp[i-1][v-arr[k]] if(v>=arr[k]&&dp[i-1][v-arr[k]]=1),边界条件是dp[0][.....
分类:
其他好文 时间:
2014-09-02 21:20:35
阅读次数:
169
题目参考网上的代码的、、、//要找到所有序列中的最长的公共子序列,//定义状态dp[i]为在第一个序列中前i个数字中的最长公共子序列的长度,//状态转移方程为dp[i]=max(dp[i],dp[j]+1); j#include #include using namespace std ;int a...
分类:
其他好文 时间:
2014-09-02 19:26:05
阅读次数:
145
题意:给定一个 m * n 的网格,网格中有非负的数字。
一个机器人要从左上角走到右下角,每次只能向下或向右移动一个位置,
找出一条总和最小的路径,返回最小值
思路1:记忆化搜索
使用一个两维 minPathSums[i][j]记录 (i,j)到(m,n)的总和最小的路径的值
然后使用dfs 枚举
复杂度:时间O(2^n) 空间O(n)
思路2:dp
设置状态为f[i][j],表示到达网格(i,j)的总和最小的路径的值,则状态转移方程为
f[i][j] = min(f[i - 1][j] + f[i][...
分类:
其他好文 时间:
2014-08-30 13:56:19
阅读次数:
216
题目:uva607 - Scheduling Lectures(递推)
题目大意:有N个主题,每个主题都有个讲课的时间。然后给定每节课的时间,并且要求一门课只能被选一次,并且选两门课以上的要选连续的。这样子每节课都有个真实的上课时间。根据这个和预期的上课时间求每节课的badness。要求在课最少的情况下。badness的和最小。
解题思路:这题不难想到状态转移方程dp【i】【j...
分类:
其他好文 时间:
2014-08-26 15:29:46
阅读次数:
218
hdu1011 和 hdu1561类似,给定每个节点的花费以及价值,并且子节点必须在父亲节点取到以后才可以被取到相当于是在树上进行的01背包dp时考虑每一个子树 root和它的每一个儿子,状态转移方程为dp[root][j]=max(dp[root][j],dp[root][j-k]+dp[ son...
分类:
其他好文 时间:
2014-08-26 00:16:55
阅读次数:
236
题意:求最多购买的件数以及有几种方法。
一看到这题就想到了背包,因为求得是种类数,所以我们可以将件数看做价值,将价格看做重量,这就变成01背包了(dp),但是还要求有几种购买方案,那么再来一个背包(kind)。
分析:有三种情况:
1》dp[j] < dp[j-s[i]]+1
那么对于这一种情况 方案背包的状态转移方程是kind[j] = kind[j-s[i]]?kind[j-s[i]]:1;(考虑到kind[j-s[i]] ==0的时候,这时候kind[j] = 1);
证明:为什么是kind[j] ...
分类:
其他好文 时间:
2014-08-25 22:57:55
阅读次数:
255