![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 56
杨瘦锅
这个作者很懒,什么都没留下…
展开
-
动态规划 - 最长递增子序列LIS
问题:一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度 样例输入:3 1 2 6 5 4 思路: 首先把问题简单化。可以先求A[1],...A[i]的最长非降子序列,令dp[i]为以A[i]结尾的最长非降子序列。当i = 1 时, 明显是长度dp[1] = 1 ; i = 2 时,前面没有比1小的数字,故dp[2]=1 , 此时的最长非降子序列为1 ; i = 3原创 2015-08-26 10:57:16 · 572 阅读 · 0 评论 -
环形石子合并
Description 在一个圆形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。编一程序,读入堆数N及每堆石子数(≤100)选择一种合并石子的方案,分别得到合并这N堆石子为一堆,可以得到的最大得分和最小得分 Input 输入包含多个例子。第一行为N,即石子堆的数目,以下一行为N原创 2016-11-02 17:18:22 · 1911 阅读 · 0 评论 -
最短编辑距离问题 : Levenshtein Distance
个人觉得只要你能明白edit数组的含义就可以理解状态转移方程了。/* 可以用来表示字符串的相似度? */ #include using namespace std; int edit[100][100] ;//edit(i,j)表示从 A的前i个字符 转化成 B的前j个字符所需的操作次数 int str_equal(char &a,char &b){ //判断两个字符是否相等,相等返回0,否则返原创 2016-10-29 21:02:34 · 704 阅读 · 0 评论 -
最小m段和问题
Description 给定N个整数组成的序列,现在要求将序列分割为M段,每段子序列中的数在原序列中连续排列。如何分割才能使这M段子序列的和的最大值达到最小? 编程任务:给定N个整数组成的序列,编程计算该序列的最优M段分割,使M段子序列的和的最大值达到最小。 Input 输入的第一行有2个正整数N和M。正整数N是序列的长度;正整数M是分割的断数。接下来的一行中有N个整数。原创 2016-11-03 11:47:05 · 1382 阅读 · 0 评论 -
动态规划 - 九度OJ 1480
题目链接:http://ac.jobdu.com/problem.php?pid=1480 我的提交 : 很显然的一个dp问题,状态转移方程: 代码: #include using namespace std; long long dp[1001]; #define max(a,b)(a>b?a:b) int main(){ int N; int a[1001];原创 2016-08-12 19:58:06 · 353 阅读 · 0 评论 -
九度OJ 1547 动态规划
题目链接:http://ac.jobdu.com/problem.php?pid=1547 题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。 要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。 求符合条件的操作序列种类。 例如,4个操作组成的操作序列符合条件的如下:原创 2016-08-15 15:43:44 · 347 阅读 · 0 评论 -
完全背包——方案个数 UVA11137 Ingenuous Cubrency
题目描述如下 : 代码如下: #include unsigned long long int dp[10001] ; int main (){ int i,j ,k ; int v[22]; int n ; for (i = 1 ; i < 22 ; i ++) v[i] = i*i*i ; dp [0] = 0 ; for ( i =原创 2015-08-28 11:04:26 · 511 阅读 · 0 评论 -
01背包问题--动规
有n个物品,每个的体积V[i],价值W[i]。现有一个体积为V的背包。怎么装才能装的物品总价值最高? 代码如下: /* 01背包 2015年8月27日09:56:48 */ #include int dp[10000]; int max (int a , int b){ return a>b?a:b; } int main (){ int n ; int原创 2015-08-27 10:55:38 · 379 阅读 · 0 评论 -
游艇租用问题2
上一篇 blog 中用了一种方法来解决这个问题。在看别人博客时,发现可以用一维数组两重循环来解决。 状态转移方程 : dp (i) = min(dp(i),dp(j)+r(j,i)) ; 其中dp(i)初始化为r(0,i), 0 code 如下: #include using namespace std; int rent[200][200] ; int g原创 2016-11-02 20:45:45 · 1140 阅读 · 0 评论