![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 54
Jefferson__
这个作者很懒,什么都没留下…
展开
-
数字组合(动态规划:01背包问题)
问题描述:给定N个正整数A1,A2,…,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案。输入格式:第一行包含两个整数N和M。第二行包含N个整数,表示A1,A2,…,AN。输出格式:包含一个整数,表示可选方案数。数据范围:1≤N≤100,1≤M≤10000,1≤Ai≤1000输入样例:4 41 1 2 2输出样例:3思路详解:题目是01背包问题的一个应用。我们可以将体积看作数的总和M,可以将价值...原创 2021-07-24 22:27:46 · 384 阅读 · 0 评论 -
拦截导弹(最长上升子序列+贪心详解)
题目描述:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式:共一行,输入原创 2021-07-24 17:59:41 · 10082 阅读 · 1 评论 -
分组背包问题
题目描述:有N组物品和一个容量是V的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vij,价值是wij,其中i是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式:第一行有两个整数N,V,用空格隔开,分别表示物品组数和背包容量。接下来有N组数据:每组数据第一行有一个整数Si,表示第i个物品组的物品数量; 每组数据接下来有Si行,每行有两个整数vij,...原创 2021-07-15 18:03:35 · 260 阅读 · 0 评论 -
石子合并(区间DP)
问题描述:设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24;如果第二步是先合并2,3堆,原创 2021-01-29 21:58:42 · 192 阅读 · 2 评论 -
最长公共子序列(线性DP)
问题描述:给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。输入格式:第一行包含两个整数N和M。第二行包含一个长度为N的字符串,表示字符串A。第三行包含一个长度为M的字符串,表示字符串B。字符串均由小写字母构成。输出格式:输出一个整数,表示最大长度。数据范围:1≤N,M≤1000输入样例:4 5acbdabedc输出样例:3算法思路:集合表示:f[ i ][ j ]表示a的前原创 2021-01-29 17:26:51 · 347 阅读 · 2 评论 -
摘花生
问题描述:Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式:第一行是一个整数T,代表一共有多少组数据。接下来是T组数据。每组数据的第一行是两个整数,分别代表花生苗的行数R和列原创 2021-01-28 21:23:41 · 146 阅读 · 0 评论 -
最长上升子序列(朴素法及其优化)
问题描述:给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式:第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式:输出一个整数,表示最大长度。数据范围:1≤N≤1000−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4基本思路:算法思想:动态规划(DP) 状态描述:f[ i ] 表示以 i 结尾的所有子序列的集合,其值表示为最大值MAX 状态划分:因为.原创 2021-01-28 18:24:01 · 183 阅读 · 0 评论 -
多重背包问题(朴素法+二进制优化)
问题描述:有N种物品和一个容量是V的背包。第i种物品最多有si件,每件体积是vi,价值是wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式:第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行三个整数vi,wi,sivi,wi,si,用空格隔开,分别表示第ii种物品的体积、价值和数量。输出格式:输出一个整数,表示最大价值。数据范围:...原创 2021-01-25 23:04:17 · 418 阅读 · 0 评论 -
完全背包问题
问题描述:有N种物品和一个容量是V的背包,每种物品都有无限件可用。第i种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式:第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行两个整数vi,wivi,wi,用空格隔开,分别表示第ii种物品的体积和价值。输出格式:输出一个整数,表示最大价值。数据范围:0<...原创 2021-01-25 11:44:45 · 393 阅读 · 0 评论 -
01背包问题
问题描述:有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式:第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第i件物品的体积和价值。输出格式:输出一个整数,表示最大价值。数据范围:0<N,V≤10000&l...原创 2021-01-24 19:54:01 · 353 阅读 · 2 评论