基础DP 19道

VJ链接:点击打开链接

基础DP做好了更有益~!

从中得出几个结论:

1. 背包问题所选的物品是没有相关性,是填充性质

2. LIS问题是元素之间有某种关系(多个属性则先排序某个,在依据另一个LIS)

3. TSP组合问题,一般进行状压,求元素的某种序

题目:

1. 最大M子段和

这个很像多维背包问题,有个数限制。同时我们可以发现最后这个元素只能是  i个子段中最后一个子段

dp[i][j]用来表示由前 j项得到的含i个字段的最大值,且最后一个字段以num[j]项结尾。

dp[i][j]=max(dp[i][j-1]+num[j],dp(i-1,t)+num[j])   其中i-1<=t<=j-1.

(因为必须是以 num[j] 结尾的,所以num[j]一定属于最后一个子段,即要么自己独立成一个子段,要么与前边以num[j-1]结尾的子段联合)

所求的最后结果为 max( dp[m][j] ) 其中1<=j<=n.

因为dp[i-1][t] 出现在j之前,所以边循环边求进行优化

类似问题:以XX为结尾是这类问题的关键,恰好也是阶段。九度 最大加法和 ,LCS

2.水题

3.看清题意是完全小于,先排序好面积,然后LIS

4.求组合,TSP问题。注意先将字符串排序,求到的自然就是字典序最小的情况

5.LIS

6.背包问题,利用混合背包

7.数塔问题,阶段清晰。就是刚开始没有依据T直接建立好阶段,导致很麻烦

8.水题,注意没有12点,显示是00. 以i为结束的最优情况

9.两种方法,①:既然所有的炮弹都要被打下来,则将用的炮弹都存放起来每次用最低的那个打,贪心策略 更高的炮弹应付更高的敌人。

②:最长不降子序列,dp[i]存放到i时有多少个LIS

10.排序后LIS,先让体重有序再判断速度

11.输出路径的背包问题,关键在于每次还要回溯判断是否已经用个这个元素,编码复杂

12.LCS

13.数塔问题,可以将初始点也放入,自后向前递推即可。注意每个板子有两个点,一次下落只能到一个木板

14.LIS N^2 NlogN

15.这个刚开始没看懂题。每次只能从给出的序列两端选取,求和最大。区间dp

16.很像之前那个滑雪,转移是有条件的,于是排序再转移

17.dp[i][j] 以i,j为起点的子矩阵。从右上角往左下角递推

18.LIS变形

19.这个题难。求使得一个序列的数字变成单调的,于是与需要给某些数字加,某些减。要变成的数字必然是已有的数字(不知道为什么)

dp[i][j] 处理到i时,以j为结尾最小值。数字起先复制一份排序,这样保证了“序” dp[i][j] = min(dp[i][j],dp[i-1][mn]+abs(a[i]-b[j]);

mn是0~j-1的最小数

时间: 2024-10-26 22:20:27

基础DP 19道的相关文章

面试题收集-java面试题及答案(基础题122道,代码题19道)

JAVA相关基础知识1.面向对象的特征有哪些方面?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

POJ 3616 Milking Time 基础DP

Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5743   Accepted: 2401 Description Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤

【NumPy基础】100道numpy练习——进阶篇

[NumPy基础]100道numpy练习--进阶篇 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/42846777 选自numpy-100,当作熟悉NumPy的练习.NumPy只是一个数值计算的工具包,在实际的算法实现中来熟悉NumPy才是有效的,因此后面不打算继续写了,到此文为止,基本的语法已经够用了,之后在实践中总结可能效果更好.而且遇到问题参考NumPy官网文档即可. 之前两篇: [NumPy基础]1

FatMouse&#39;s Speed 基础DP

FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13643    Accepted Submission(s): 6011Special Judge Problem Description FatMouse believes that the fatter a mouse is, the faster i

FatMouse&#39;s Speed ~(基础DP)打印路径的上升子序列

FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take the data on a collection of mice and put as large a subset of this data as possible into a sequence so that the weights are increasing, but the speed

Apple Catching POJ 2385(基础dp)

原题 题目链接 题目分析 基础dp题,按照题意很容易给出dp定义,dp[i][j],表示在i时间内,用j次转移机会得到的最大苹果数.dp转移如下,如果j==0,则dp[i][j]=dp[i-1][j],否则 如果当前位置有苹果dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+1.否则dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]).最后在dp[T][j]里找最大值就行了,(0<=j<=W). 代码 1 #include <iostrea

基础dp

队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加深了对dp的理解,但要想搞好dp,还需要多多练习啊. HDU - 1024 开场高能 给出一个数列,分成m段,求这m段的和的最大值,dp[i][j]表示遍历到第i个数,已经划分了j段,对于每一个数有两种决策,加入上一个区间段,自己成为一个区间段,故dp[i][j] = max(dp[i-1][j]+

【NumPy基础】100道numpy练习——Apprentice篇

[NumPy基础]100道numpy练习--Apprentice篇 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/42811297 今天又用半小时扫了一下Apprentice篇里的10道exercise,不知道怎么翻译Apprentice(学徒--)这个词,就直接以Apprentice篇作为题目了.numpy语法直白如水啊,花这些时间exercise有点浪费了.......Anyway,为了后面更熟练地用一

hdu 5586 Sum 基础dp

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description There is a number sequence A1,A2....An,you can select a interval [l,r] or not,all the numbers Ai(l≤i≤r) will become f(Ai).f(x)=(1890x+143)mod1