![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
dp
wu
WAWA战士
起飞
展开
-
编辑距离(dp)
定义编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:插入一个字符删除一个字符替换一个字符举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替换为...原创 2020-03-01 21:12:26 · 505 阅读 · 0 评论 -
区间dp(dp)
思路:从各个区间中找最优分割点,比较的是过程中的代价再加上最终两对合成一堆的必要代价,递推出总体最优,首先要思考如何拆环成链,我们知道无论如何最后肯定剩下两堆然后才会堆到一起,这同时也意味着最开始有两个堆注定不会搞在一起(可以自己模拟试试),我们就可以在这两个堆之间切开圆让它变成链,但是这两个堆具体是哪两个我们并不知道,所以任意两个堆之间都拆一次即可,但那样太麻烦了,这时候黑科技登场,在原...原创 2020-02-28 20:47:45 · 84 阅读 · 0 评论 -
分组背包(dp)
acwing例题#include <iostream>#include <algorithm>using namespace std;int dp[101],v[101],value[101];int main(){ int n,m,x,volume,y,q,u; cin>>n>>volume; for(q=1;...原创 2020-02-26 20:56:20 · 133 阅读 · 0 评论 -
Dividing coins(dp)
思路:这是一道01背包题,输入的所有数的和的一半作为背包中的容量,数字的个数相当于种类,如果这个和为奇数,那么就要2dp[sum/2]+1,这个可以自己带入1和12试一下。偶数就是2dp[sum/2]了#include <iostream>#include <algorithm>#include <stdio.h>using namespace std;...原创 2020-02-25 19:29:32 · 153 阅读 · 0 评论 -
Is Bigger Smarter?(dp)
这道dp出的太好了,补充了我很多知识思路:将两个限制条件化成一个,我觉得这里挺妙的,就是将智商逆序,由大到小的顺序排下去,这就完成了题目中的其中一个条件了,现在相当于在重量中找最长上升子序列了。当然要记得排序之前把id存好,不然就乱套了。path[i]存放的是数字i能够接上的前一个最长上升子序列结尾的数字的下标首先我们要初始化path[i]数组为i,因为如果i之前的值都大于i所对应的,那么相...原创 2020-02-24 22:46:08 · 262 阅读 · 0 评论 -
hdu1087(dp)
思路:这是dp,要想知道最后一项及之前上升子序列的最大和,那么我们从头开始每一步都应当得到上升子序列的最大和,如此递推。设add[i]表示在i项及以前上升子序列的最大和,在第二层for用来得到add[i]的最大值,并且判断是否在之前所有add中最大。至于a[i]>a[j],意思是尝试找到比a[i]小的数字作为结尾,让a[i]接上。这里要注意输入方式,我选择空开a[0]从a[1]开始并且...原创 2020-02-23 23:44:45 · 60 阅读 · 0 评论 -
Bachet's Game(博弈,dp)
思路:这是博弈dp。dp[i]=1意思是i个石头的时候先手是赢家,0则是输家首先如果我们想stan赢下比赛,那么就要让dp[n-take[j]]=0(即能拿下最后一个石头的前一次赢家要是ollie),那就保证了下一次出手的必然是先手者且必然拿下最后一块石头,这里的dp[n-take[j]]=0只需要出现哪怕一次也足够了,因为题目有说到二者都想尽力赢下游戏,所以哪怕出现了一次stan也一定会把握...原创 2020-02-23 15:18:12 · 132 阅读 · 0 评论 -
String Partition(字符串,dp)
思路:典型dp,第一部分的for双重循环语句把一个大数字拆分成小数字的所有形式,第二部分就是比较了,从0开始遍历,dp[i] 是指第i项以及前面的项中最大的和。数组a[i][j]用于表示以i为首以j为尾的值这里状态转移方程在逐步将i的元素进行求和,dp[j]用于表示前j项最大值,a[j+1][i]就是表示后面整体的值这里j相当于一个分割点,将一段数字分成两半我们先假设没有关键点1,,看看关...原创 2020-02-22 23:27:36 · 317 阅读 · 0 评论 -
二维背包优化(dp)
思路:将三维压缩成二维,跟之前背包问题一样,二维01背包采用逆序,完全二维背包就顺序,多重二维背包二进制优化然后变成二维01背包洛谷例题#include<stdio.h>#define max(a,b) a>b?a:bint tiji[51],zhiliang[51],kll[51],dp[401][401];int main(){ int j,k,i,u,...原创 2020-02-19 13:53:54 · 265 阅读 · 0 评论 -
二维背包(dp)
思路:多了一种代价,只需要普通背包问题加一维即可洛谷例题#include<stdio.h>#define max(a,b) a>b?a:bint tiji[51],zhiliang[51],kll[51],dp[51][401][401];int main(){ int j,k,i,u,y,x,n,m,max,volume,mass,kind; sc...原创 2020-02-19 13:48:08 · 349 阅读 · 1 评论 -
最大子段和(dp)
思路:不断记录并且比较以当前数字为结尾的一段子段和,对于这个数字而言,有两种选择,一是自成一派,抛弃前面和为负的串,二是强强联合,与前面和为正的串连起来,变成一大串。洛谷例题#include<stdio.h>#define max(a,b) a>b?a:bint a[100001];int main(){ int j,k,i,u,y,x,n,m,max,ma...原创 2020-02-19 11:47:03 · 84 阅读 · 0 评论 -
洛谷P1164小A点菜(dp)
这个题目我一看到装满就直接初始化负无穷,后来发现全WA了。因此本文用于提醒自己,这题不是装满问题#include<stdio.h>#include<string.h>#define max(a,b) a>b?a:bint price[100005],dp[100005];int main(){ int kind,money,i,j,k,r,q,m,n;...原创 2020-02-11 16:44:18 · 76 阅读 · 0 评论 -
多重背包二进制优化(dp)
本题作为多重背包二进制优化模板思路:一个数是能用二进制表达出来的,多重背包有数量限制且按照常规三个for容易超时,因为第三个循环对数量的处理是逐个进行的,比如有10个,那就要执行10次.因此通常我们把数量拆分,比如说10可以分装成(1+2+4)+3,那4是怎么来的,这个4是二进制的结束点,10-(1+2)>2²,所以继续进行,10-(1+2+4)<2³ ,即停止,此时余数为3,。二...原创 2020-02-11 15:39:08 · 267 阅读 · 0 评论 -
洛谷P1002过河卒(dp)
第一次自己做出了一道简单dp题目,发篇博客纪念一下哈啊哈哈思路:先找到状态转移方程,根据dp定义,把大问题所求变成一个个子问题,我要知道某个位置的路径数目,那么我要知道,到达这个位置之前每一个位置能有多少种方法到达,那么我每一个位置的路径数目与上一个位置的路径数目有关 ,上一个位置无非是左边一点和上边一点即纵坐标+1和横坐标-1。细节:这里我是把图形倒过来的,即(0,0)是在左下角的,看成坐标...原创 2020-02-10 16:40:28 · 66 阅读 · 0 评论 -
简单贪心(贪心)
当时这个题目的标签是背包,我就信以为真,后来发现复杂度太高,答案会超时,因此以这篇博客提醒自己,不能搞混。洛谷原题#include<stdio.h>#include<string.h>#include<math.h>#define max(a,b) a>b?a:b#define min(a,b) a<b?a:bint dp[100000...原创 2020-02-09 17:29:47 · 460 阅读 · 0 评论 -
背包问题溢出型最小值(dp)
之前发了一篇blog关于背包问题的最小值问题,现在发现这种问题还有变种。即溢出型的最小值。本文用于补充这篇blog原本这篇博客,属于刚好装满类型。以下则是溢出反而会有最小值:洛谷例题1洛谷例题2下面贴出例题二洛谷P1926代码:#include<stdio.h>#include<string.h>#include<math.h>#define ...原创 2020-02-09 16:30:37 · 660 阅读 · 0 评论 -
多重背包最小值(dp)
该代码可当作背包问题最小值模板,用的是二维数组,个人觉得好理解,二维数组理解了一维数组也就ok了注意初始化dp[0][0]=0;dp[0][1~n]=+∞题目链接思路:m就是容量,i的四次方为每个物品体积,因为同一个i的四次方可重复取,直到j(当前容量)为止,即可看做完全背包求最小值。如果取了当前数字i,n++,(j-i四次方)就是剩下要取的数字四次方和#include<stdio....原创 2020-02-08 15:35:42 · 675 阅读 · 1 评论 -
LightOJ 1042 Secret Origins(贪心,位运算)
Secret OriginsThis is the tale of Zephyr, the greatest time traveler the world will never know. Even those who are aware of Zephyr’s existence know very little about her. For example, no one has any ...转载 2020-01-27 14:06:37 · 148 阅读 · 0 评论 -
hud1248寒冰王座一维数组(dp)
典型完全背包问题这个是模板,最好记一下#include<stdio.h>#include<string.h>int dp[10000];int max(int a,int b){ return a>b?a:b;}int main(void){ int money,n,i,k,y,j,value[3]={150,200,350},time...原创 2020-02-03 23:32:53 · 127 阅读 · 0 评论 -
01背包装满问题(dp)
最好先看完这个先看满与不满的代码区别,不装满只求最大价值:将第0行全部初始化为0就完事装满且价值尽可能大:将第0行第一个元素初始化为0,这一行的其他元素赋值为-∞(-999也行,主要保证其绝对值大于全部物品的价值之和即可) f[0]=0; f[1~n]= -∞思路为什么:对于装满,在没有物品装入的时候,只有容量为0才能装满背包,而容量为正数的时候不可能装满(没有物品塞进去怎么装都...原创 2020-02-02 17:01:53 · 781 阅读 · 0 评论 -
01背包问题优化版(dp)
有N件物品和一个容量为V的背包,原方法的时间和空间复杂度均为O(N*V),其中时间复杂度基本已经不能再优化了,但空间复杂度却可以优化到O(V)。空间复杂度:是对一个算法在运行过程中临时占用存储空间大小的量度思路:用一维数组优化。因为原表中每个数据都只与上一行有关,通过滚动数组将一行数据代替上一行/*问题描述:有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们...原创 2020-02-02 01:14:50 · 271 阅读 · 0 评论 -
01背包问题(dp)
思路:填表。以下有几种情况:情况一: 第j件放不进去(当前容量i小于第i件物品),这时所得价值为:dp[i][j]=dp[i] [j-1]情况二: 第j件不放进去(容量足够),这时所得价值为:dp[i][j]=dp[i] [j-1]情况三: 第j件放进去(容量足够),这时所得价值为:dp[ i-weigh[j] ] [j-1]+value[j]/*问题描述:有编号分别为a,b,c...原创 2020-02-01 17:27:06 · 106 阅读 · 0 评论 -
击鼓传花(dp)
击鼓传花Time Limit:1000MS Memory Limit:65535K题型: 填空题 语言: 无限制描述击鼓传花,也称传彩球,是中国传统的民间游戏。现在编号为1至n的 n名同学按编号次序顺时针围坐成一圈,小明坐在1号位置,他左手边是2号,右手边是n号。彩花开始在小明手里,鼓声响起之后,小明可以把花传递给2号同学,也可以传递给n号同学,接到花的同学可以随意选择向左还是向...原创 2020-01-31 20:21:26 · 1067 阅读 · 1 评论