
线性dp+背包
code自留地
这个作者很懒,什么都没留下…
展开
-
编辑距离
给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。 插入–在字符串A的某个位置插入某个字符。 替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度为m的字符串B。字符串中均只包含大写字母。...原创 2021-05-03 11:10:39 · 117 阅读 · 0 评论 -
登山(最长上升子序列和最长下降子序列结合)
登山五一到了,ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?输入格式第一行包含整数N,表示景点数量。第二行包含N个整数,表示每个景点的海拔。输出格式输出一个整数,表示最多能浏览的景点数。数据范原创 2021-05-01 21:50:41 · 254 阅读 · 0 评论 -
贪吃的大嘴(多重背包)
题目描述有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她希望你能设计一个程序帮她决定要吃哪些小蛋糕.输入先输入一行包含2个整数m、n,表示大嘴需要吃美味度和为m的小蛋糕,而小蛋糕一共有n种,下面输入n行,每行2个整数,第一个表示该种小蛋糕的美味度,第二个表示蛋糕店中该种小蛋糕的总数数据规模和约定m ≤ 20000,小蛋糕总数量≤50.输出...原创 2021-04-17 15:46:15 · 267 阅读 · 0 评论 -
聪明的美食家(最长上升子序列)
如果有人认为吃东西只需要嘴巴,那就错了。都知道舌头有这么一个特性,“由简入奢易,由奢如简难”(据好事者考究,此规律也适合许多其他情况)。具体而言,如果是甜食,当你吃的食物不如前面刚吃过的东西甜,就很不爽了。大宝是一个聪明的美食家,当然深谙此道。一次他来到某小吃一条街,准备从街的一头吃到另一头。为了吃得爽,他大费周章,得到了各种食物的“美味度”。他拒绝不爽的经历,不走回头路而且还要爽歪歪(爽的次数尽量多)。输入两行数据。第一行为一个整数n,表示小吃街上小吃的数量第二行为n个整数,分别表..原创 2021-04-17 15:04:08 · 372 阅读 · 0 评论 -
数的划分(完全背包求方案数)
一个正整数可以划分为多个正整数的和,比如n=3时:3;1+2;1+1+1;共有三种划分方法。给出一个正整数,问有多少种划分方法先不着急归纳,我们先试着分析状态转移关系用f[i][j]表示前i个数可以组合出j的方案数本题一个重要的性质:每个数字都可以使用无限多次(这不就是完全背包吗,笑)也就是说现在组成的数字j,可以不使用数字i,也可以在使用数字i后变成数字j,但是得保证数字j是大于等于i的这样我们就可以写出状态转移方程:f[i][j] = f[i-1][j]+f[i][j-i]原创 2021-04-17 13:45:44 · 486 阅读 · 0 评论 -
P1077 [NOIP2012 普及组] 摆花(背包问题求方案数)
luogu 链接:https://www.luogu.com.cn/problem/P1077本来我是没有想到背包问题求方案数的而是直接分析状态转移方程写出核心代码以后才恍然大悟首先我们用一个二维数组来储存状态:f[i][j]表示前i种花里一共摆j盆的方案数目那么很容易想到枚举到第i种花的时候方案数都是由摆前i-1种花的情况继承而来的所以我们只需要考虑第i种花怎么摆,也就是第i种花怎么摆的问题需要注意的是不是每种花都必须摆出来,某些种类的花在其他种类的花可以摆够的情况下是可以一盆都不原创 2021-04-17 11:27:17 · 1602 阅读 · 0 评论 -
和最大子序列
题目描述对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。输入输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。其中1 < = N < = 100000-10000 < = A[i] < = 10000输出输出仅包含一个整数,表示你算出的答案。...原创 2021-04-16 19:04:27 · 79 阅读 · 0 评论 -
集合的划分《信息学奥赛一本通-动态规划》
【题目描述】设S是一个具有n个元素的集合,S=〈a1,a2,……,an〉,现将S划分成k个满足下列条件的子集合S1,S2,……,Sk,且满足:1.Si≠∅2.Si∩Sj=∅ (1≤i,j≤k,i≠j)3.S1∪S2∪S3∪…∪Sk=S则称S1,S2,……,Sk是集合S的一个划分。它相当于把S集合中的n个元素a1,a2,……,an 放入k个(0<k≤n<30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S...原创 2021-04-14 13:36:28 · 589 阅读 · 0 评论 -
P1356 数列的整除性(动态规划)
luogu 链接:https://www.luogu.com.cn/problem/P1356我第一次看完题目以后只,想到了bfs,想着搜索,看能不能搜到符合题意的情况。但是仔细一想是不行的,因为bfs里每次对队头处理都是相同的操作,但是这个题要求前一个数加上或者减去后一个数,用bfs并不能很好的处理这种情况。然后看了题解发现居然可以用dp解,不得不说dp功能很是强大用二维数组f[i][j]表示前i个数的各种组合是否可以出现余数为j的情况,因此f数组作为集合属性存储的是1或0两种状态。因原创 2021-04-10 20:23:42 · 273 阅读 · 0 评论 -
[NOIP2002 普及组] 过河卒(dp+记忆化搜索超详细讲解)
luogu 链接:https://www.luogu.com.cn/problem/P1002看到这道题的时候我想起了蓝桥杯考过的两道题,其一是地宫寻宝,其二是十一届刚考过的一道题走方格。共同点都是只能走两个方向并且询问的都是方案数(可能这道题才是爹吧)第一种方法就是记忆化搜索,可能很多人都想到了搜索,但是这类求方案数的题目若是要用普通的搜索的话就必须用回溯,数据量太大了是跑不出来的。所以就需要记忆化搜索,新建一个dp数组用来存储每个点可以被访问多少次,这样可以有效避免重复搜索,提高搜索效率原创 2021-04-10 15:07:34 · 622 阅读 · 1 评论 -
位数问题《信息学奥赛一本通-递推算法》(状态机)
【题目描述】在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。【输入】读入一个数N(N≤1000)。【输出】输出有多少个数中有偶数个数字3。【输入样例】2【输出样例】73简单分析题意,发现此题属于重叠子问题,每一位上的3的个数是偶数还是奇数与上一位的3的状态息息相关。很自然联想到动态规划。但是为什么联想到状态机模型呢?做过大盗阿福,股票买卖问题的同学都很熟悉此类题目的特色(给不清楚的.原创 2021-04-10 10:37:25 · 473 阅读 · 0 评论 -
数字组合(01背包求方案数)
数字组合给定N个正整数A1,A2,…,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案。输入格式第一行包含两个整数N和M。第二行包含N个整数,表示A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。输入样例:4 41 1 2 2输出样例:3题意分析:可以把数字看成体积,题目也即是要求恰好装满的情况有多少种。因为要求的是恰好装满的情况,所以初始化的时候自然不能初始化f[0] = 1以外的情况,也就是说只能从0开始转移...原创 2021-04-09 15:55:06 · 883 阅读 · 0 评论 -
P1004 [NOIP2000 提高组] 方格取数 (线性dp)
luogu链接:https://www.luogu.com.cn/problem/P1004同一个图走两次,上一次走过的有值的点下一次就变成了0。由于dp问题的特点,记录路径是比较繁琐的。如果分步来求,则不容易知道第一次走取走了哪些数。不如我们同时维护两次的信息,若是两点坐标重复,则只加一次(或者转化成加两次,减一次)。#include<iosstream>#include<cstdio>#include<cstring>#include<algor原创 2021-04-09 11:15:35 · 226 阅读 · 0 评论