DP
文章平均质量分 67
wnjason
这个作者很懒,什么都没留下…
展开
-
ACM POJ 2593 Max Sequence ----最大子段和问题
题目大意:输入一个数组,原创 2014-09-19 02:02:46 · 625 阅读 · 0 评论 -
POJ 1631 LIS O(nlogn)
题目大意:输入n表示测试用例数,接着输入p,表示连接端口数,之后输入p行端口号,表示左侧第i个端口要连接的右侧的哪个端口,要求所有的端口两线不能相交,求出最多的端口连线的数目。算法思想:此题的本质就是求最长上升子序列,但算法的复杂度要求为O(nlogn)。用一个数组b[i]记录当序列长度为i的时候第i个元素的最小值。在算法过程中b[]是不断动态更新的,当a[i]>=b[k]时,b[k+1]原创 2014-12-02 13:18:50 · 445 阅读 · 0 评论 -
HDOJ 1231 ---最大连续字段和
题目大意:给出一个序列求出最大连续子段和,同时找出起始位置的元素和终止位置的元素,注:当有多组答案时,找下标最小的。算法思想:此题应用DP求解,不然会超时,状态方程为:b[i]=max{b[i-1]+a[i],a[i]}代码如下:#include #include #include #include using namespace std;const int MAXN=1原创 2014-12-09 22:18:52 · 554 阅读 · 0 评论 -
LeetCode---Maximum Subarray
题目大意:给出一个数组,求出该数组中的最大字段和。数组中的元素可能为正也可能为负。算法思想:a[j]表示数组中的元素,b[j]表示从0到j的子段和,他可能为b[j-1]+a[j],也可能为a[j]。则b[j]=max{b[j-1]+a[j],a[j]},遍历数组找出最大的b[j]即可。代码如下:class Solution {public: int maxSubArr原创 2015-09-28 15:12:28 · 288 阅读 · 0 评论 -
LeetCode---Minimum Path Sum
题目大意:给出一个二维数组,数组中的每个元素非负。找出一条从左上角到右下角的最短路径。(每次只能向右或者向下走一格)算法思想:1.采用一个二维数组V记录从起点到当前位置的最短距离。2.遍历二维数组,填写数组V。V的值分3种情况 (1)当前位置处于上边界 V[i][j]=V[i][j-1]+grid[i][j] (2) 处于左边界V[i][j]=V原创 2015-10-19 20:45:38 · 461 阅读 · 0 评论 -
LeetCode---Triangle
题目大意:给出一个三角形数组,求出从顶部到底部的最小路径和。算法思想:1.采用一个2维数组记录从顶部到当前位置的最小路径和。(滚动数组的原理)2.遍历三角形数组,对于当前位置的最小路径和有3种情况。 (1)处于三角形的内部,则V[1][j]=min(V[0][j],V[1][j-1])+triangle[i][j]. (2) 处于三角形的左边界,则V[1原创 2015-10-19 22:18:31 · 363 阅读 · 0 评论 -
LeetCode---Unique Paths
题目大意:给出一个mXn的网格,机器人处于左上角,终点在右下角。机器人每次只能向右或者向下移动一格。机器人到终点共有多少种走法?算法思想:1.如果当m或n为0时返回0,如果当m或n为1时返回1.2.设置一个mXn的数组用来记录从起点到当前位置共有多少种方法。3.初始化数组的上下边界。处于边界的位置只能有一种走法。3.填表。num[i][j]=num[i-1][j]+num[i]原创 2015-10-21 20:36:40 · 329 阅读 · 0 评论 -
LeetCode---Unique Paths II
题目大意:给出一个m*n的数组,数组中放置若干个障碍物,机器人从左上角到右下角有多少种路径?算法思想:1.如果m或n为0值的话,直接返回0.2.设置一个val表用来记录机器人从起点到当前位置的方法数,初始时表中元素都置为0。3.初始化val表的左边界和上边界。如果遇到障碍物则该位置及之后位置都为0,否则为1.4.遍历障碍物向量,填写val表。val[i][j]=val[i-1]原创 2015-10-22 21:09:48 · 344 阅读 · 0 评论 -
LeetCode---Longest Palindromic Substring
题目大意:给出一个字符串,求出该字符串中的最长回文串。算法思想:采用动态规划的解法。利用f(i,j)判断si~sj是否是一个回文串。状态转移方程 :f(i,j)= true i==jf(i,j)= true s[i]=s[j] i+1=j;f(i,j)= s[i]==s[j]&&f[i-1][j-1];代码如下:class Solution {p原创 2015-11-19 21:10:57 · 245 阅读 · 0 评论 -
HDOJ 1025 LIS O(nlog(n))
题目大意:给出N,表示有N组需求,每组需求r ,q 表示贫穷城市需要发达城市的资源,更具这N组需求修建铁路,铁路不能交叉,求出最多可修多少条铁路?算法思想: 将N组需求按r从小到大排序,之后将q序列的最长上升子序列。此题因为数据量比较大,所以需要NlogN 的算法。 用一个b[]数组,b[i]记录长度为i的上升序列中最后一个元素的最小值,在算原创 2014-12-02 11:10:32 · 627 阅读 · 0 评论 -
HDOJ 1257 LIS
题目大意: 输入N,表示雷达监测到来袭的导弹数目,之后输入每个导弹的发射高度,因为每套系统第一次发射的导弹高度任意高,后续发射的导弹不能高于先前的高度,所以计算打落所有导弹所需要的最小系统数量。算法思想: 因为每套系统所发射的导弹是非递增的序列,所以只需求出所有来袭导弹的最长上升序列的规模数即为需要的系统数。用dp[i]记录到i的最长上升子序列,状态方程原创 2014-12-01 16:00:12 · 594 阅读 · 0 评论 -
POJ 2533 LIS
题目大意:找出所给序列的最长上升子序列。算法思想: 采用动态规划的思想,用dp[i]记录到第i个元素的最长上升子序列的长度,状态转移方程为 dp[i]=max(dp[j](1代码如下: #include #include #include using namespace std;const int MAXN=10000;int a[MAXN];in原创 2014-12-01 16:26:40 · 381 阅读 · 0 评论 -
ACM POJ 1050 To the Max 最大子矩阵问题
题目大意:给出一个二维矩阵,求出此矩阵中原创 2014-09-20 23:29:11 · 796 阅读 · 0 评论 -
ACM POJ 1949 Chores
题目大意: 输入N项零工,每项零工有一个工作时间,原创 2014-09-22 02:42:53 · 1014 阅读 · 0 评论 -
ACM POJ 1458 Common Subsequence
题目大意:输入两个字符串,求出最长公共子序列原创 2014-09-23 01:16:04 · 475 阅读 · 0 评论 -
ACM POJ 1163 The Triangle DP
题目大意:输入一个有正整数组成的三角型,输出原创 2014-09-26 22:54:48 · 421 阅读 · 0 评论 -
ACM OJ Hrbeu 1040 Compromise ||POJ 2250
题目大意:输入所租测试用例原创 2014-09-17 00:56:45 · 493 阅读 · 0 评论 -
ACM POJ 1160 Post Office
题目大意:有V个村庄,要求在V个原创 2014-09-28 21:21:04 · 598 阅读 · 0 评论 -
ACM POJ 1088 滑雪
题目大意:输入一个二维矩阵,矩阵zhon原创 2014-09-30 17:14:26 · 694 阅读 · 0 评论 -
ACM POJ 2192 Zipper
题目大意:输入字符串a,b,c 要求判断c是否有a,b中的个字符保持原有顺序组合而成。算法思想:DP用dp[i][j]表示a的前0~i-1共i个字符和b的前0~j-1共j个字符是否构成c[i+j-1].状态转换方程:if(i>=1&&c[i+j-1]==a[i-1])dp[i][j]=dp[i][j]||dp[i-1][j]if(j>=1&&c[i+j-1]==b[j-原创 2014-10-09 20:21:10 · 763 阅读 · 0 评论 -
LeetCode---Palindrome Partitioning II
题目大意:给出一个字符串,对其进行切割使得使得每一部分都是一个回文,求出所有的切法中最小的切割数。算法思想:本题主要基于动态规划思想。1.设f[i]表示从字符i到n-1之间最小的切割数。2.则状态转移方程为f[i]=min{f[j+1]+1} i=3.设p[i][j]表示si~sj是否是回文。p[i][j]=s[i]==s[j]&&p[i+1][j-1].代码如下:cl原创 2015-12-28 19:09:04 · 310 阅读 · 0 评论