摘要:最大子矩阵是一种典型的dp问题。某种程度上说是最大连续子序列和问题的扩展。1081原题地址这是最常见的最大子矩阵问题的体型。简单的解决方案就是把列累加,遍历任意两行的累加值的差值,然后就转换成了普通的最大连续子序列和问题。从而将二维问题转换为一维。时间复杂度较高为O(N^3)代码:#include#...
阅读全文
摘要:题目分析原题地址最简单的最长公共子序列(LCS)问题的模板题了。不解释。------------------------------------------------------------------------状态转移方程:dp[i][j]=dp[i-1][j-1]+1 (a[i-1]=...
阅读全文
摘要:原题地址题目分析这道题基本上是在普通LCS问题上的一点小小的变形,由求LCS的长度,改为求LCS的权值。架构还是不变的。可作为LCS问题的模板题。时间复杂度O(N^2)。注意题目中的字母都是小写字母,也就是只有26种字符。不需要开太大的数组。所以hash就是很好的一种保存权值的方法。另外吐槽一下。子...
阅读全文
摘要:原题地址简单dp题,LIS。不同之处是这里要求得的不是最长的子序列,而是权重和最长的子序列。其实大同小异。状态数组就是到达每个位置的最大权重。LIS问题常用解法就是两个:人人为我我为人人本题我用了我为人人的思路 。就是确定子序列起点,把其后面每一个大于它的值的位置的状态数组更新。#include#i...
阅读全文
摘要:原题地址题目可以按DP做,或者不按DP做,据说数据是比较水。然后这题的DP模型就是一个LIS问题(最长递增子序列)。我用模板代码给AC了。。囧。从这个意义上来说,是水题。//本题采用了人人为我的dp思路//但是我并不理解,这道题为什么看作LIS就能AC#include#include#include...
阅读全文
摘要:原题:数塔这个是动态规划入门题,比较简单。题意是:一个数字组成的三角形,从上到下找一条路径,使这条路径上数字之和最大。解题思路,就是要从下往上看。举个例子:如果你从上到下走到了第4行第1个数,也就是2,那么接下来有两个数可以走19和7,而你必然会选择19。所以就可以根据这个思路更新上面一行的数。把2...
阅读全文
摘要:Robberies题目注意的是,概率的精度问题,不是只有两位小数。。有很多位,所以要转换思路。我也是看了网上的解题报告后,懂的。不同之处:一般的理解,背包容量应为概率1。转化思路,背包容量为银行总的钱数。改为在总钱数一定的情况下,通过少抢点钱来增加自己安全的逃跑概率,在大于等于给定逃跑概率时求解所能...
阅读全文
摘要:Charm Bracelet简单的0 1背包。数据也只有一组。但是呢,要注意个MLE的问题。数组要开大,至少13000吧。但是绝不能开成二维数组。这样肯定会MLE了。。确实二维的01背包代码,理解起来较为直观。但是对内存的消耗也着实不可小觑。。一下是一维数组的AC代码:#include using ...
阅读全文
摘要:如题,求最大连续子序列和注意的是,全为负的情况比较特殊直接用1003的代码,改改也就过了这里用第三组数据演示一下算法的过程。i012345a[i]5-83250《《maxsum=temsum=5;start=end=0;i=1 temsum=5-8=-3;i=2 temsum0; temsum=...
阅读全文
摘要:题意为最长连续子序列和。对我来说是第一道dp题,也是一道模板题。需要输入子段的开始start和结束的位置end。定义序列为A:1----n;A[1]....A[i]的maxsum取决于A[1]....A[i-1]A[1...i]=max{maxA[1...i-1]+A[i],A[i]}即如果max ...
阅读全文