动态规划
文章平均质量分 52
长夜qingfeng
羽落尽长安,南亭风林晚
展开
-
POJ 1384 Piggy-Bank
完全背包的应用#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespace std;#define INF 0x3f3f3f3f/*10 110//e空罐重量,f满罐的重量2//给定货币中使用的各种硬币的数量1 1//p:硬币价值;W:重量30 50*/int p[1005],w[原创 2021-04-06 17:26:56 · 70 阅读 · 0 评论 -
HDU 1159 Common Subsequence (动态规划--最大公共子序列)
题目Problem DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, …, xm> another sequence Z = <z1, z2, …, zk> is a subsequence of X if there exists a strict原创 2021-03-19 20:41:58 · 87 阅读 · 0 评论 -
HDU 1069 Monkey and Banana
题目Problem DescriptionA group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever enough, it shall be原创 2021-03-14 20:27:09 · 137 阅读 · 0 评论 -
HDU 1003 Max Sum
题目Problem DescriptionGiven a sequence a[1],a[2],a[3]…a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.InputThe first line of the input contains an inte原创 2021-03-10 20:03:53 · 71 阅读 · 0 评论 -
leetcode--122. 买卖股票的最佳时机 II
题目链接https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/一、题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(原创 2021-02-06 15:59:16 · 134 阅读 · 0 评论 -
HDU 汉诺塔IV
题目Problem Description还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。Input输入数据的第一行是一个数据T,表示有T组数据。每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。Output对于每组输入数据,最少需要的摆放次数原创 2021-01-30 21:03:48 · 381 阅读 · 1 评论 -
leetcode--53. 最大子序和
题目链接https://leetcode-cn.com/problems/maximum-subarray/一、题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。二、分析和代码1.分析求最大子序和,动态规划是比较好的1.最大连续子序列和:dp[i] = max{ A[i] , dp[i-1] + A[原创 2021-01-24 21:41:55 · 108 阅读 · 1 评论 -
leetcode-- 674. 最长连续递增序列
一、题目https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nu原创 2021-01-24 11:07:10 · 62 阅读 · 0 评论 -
POJ Palindrome
一、分析题目意思:给你个字符串。求最少须要加入几个字符使它变成一个回文字符串。本来想着硬来,后来发现太麻烦了,然后才知道,这个题可以看作是最长公共子序列的动态规划题(—!),将字符串和字符串的逆向的最长公共子序列求出来,最后再用总长度减去即可。而最长公共子序列最近正好有了解:我们观察两个字符串,如果他们最后一个字符相同,则他们的LCS(最长公共子序列简写)就是两个字符串都去掉最后一个字符的LCS再加一。因为最后一个字符相同,所以最后一个字符是他们的子序列,把他去掉,子序列就少了一个,所以他们的LCS原创 2021-01-16 21:06:12 · 157 阅读 · 0 评论 -
最长公共子序列LCS(dp问题)
一、分析上述问题也可以用暴力穷举来求解,先列举出X字符串所有的子串,假设他的长度为m,则总共有种情况,因为对于X字符串中的每个字符都有留着和不留两种状态,m个字符的全排列种类就是种。那对应的Y字符串就有种子串, n为Y的长度。然后再遍历找出最长的公共子序列,这个复杂度非常高,我这里就不写了。我们观察两个字符串,如果他们最后一个字符相同,则他们的LCS(最长公共子序列简写)就是两个字符串都去掉最后一个字符的LCS再加一。因为最后一个字符相同,所以最后一个字符是他们的子序列,把他去掉,子序列就少了一个,所.转载 2021-01-15 20:27:27 · 305 阅读 · 0 评论 -
POJ Longest Ordered Subsequence
前言一道动态规划基础题,但对于我来说还是好难啊,搞了我好久一、分析题目大意:给出n个数, 求最长有序子序列(升序)第一步,先寻找子问题,以i结尾的最长子序列长度第二步,写出状态转移方程,这个是做出这题的关键,外层循环i遍历整个数组,内层循环j遍历i之前的数,只要找到j小于i,即a[j] < a[i],便可以+1,写出状态转移方程max(1,dp[j]+1) + 1,所以置a[i]初始化为1,每次更新a[i]即可,最后比较每个a[i],最大的即为要求的结果。二、代码感觉我的代码是错的啊,为原创 2021-01-14 11:20:21 · 71 阅读 · 0 评论 -
HDU The Triangle
前言这次之前做过的题终于做了出来,还是一遍过的(鼓掌!)。一、分析题目还是很容易的,要我们求从上加到下的最大路径和。因为它,每一步只可以向左斜下或向右斜下,这样我们就可以从下向上计算,每次选左斜下或右斜下中较大的往上加,这样加到第一个数时就是最终答案了。二、代码代码如下(示例):#include<iostream>#include<cstring>#include<stdio.h>using namespace std;const int maxn=原创 2021-01-12 19:37:40 · 80 阅读 · 0 评论 -
HDU To the Max
前言明明以前做过却忘了的感觉真的超级难受,最后还是受了别人的代码启发才写出来。一、分析这个题是要求求最大子矩阵和,不难看出这题肯定和动态规划挂钩了,但直接二维的话肯定很难。所以这里可以先将二维压缩成一维来做(居然还能这样),我们可以按行枚举,将矩阵每一列求和,存到另一个一维数组,这样问题就变成了求最大连续字段和了,这时就是一个非常简单的问题了。二、代码代码如下(示例):#include<iostream>#include<cstring>#include<std原创 2021-01-12 15:57:47 · 69 阅读 · 0 评论