DP_背包专辑

2024-06-19 15:32
文章标签 dp 专辑 背包

本文主要是介绍DP_背包专辑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这短时间看了论文《背包九讲》,看到背包问题解法中的优美之处也看到背包问题在现实中的应用,总结出一句话:背包问题值得一看。

    背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题需要枚举每种状态,但是可以通过动态规划减少枚举的次数,提高效率,主要思想是每次都利用前面得到的状态进行转移得到当前的状态。这类问题很少能用贪心的,首先,贪心很难证明策略是否正确,其次贪心必定使得枚举量大量减少,会导致结果错误。

    个人认为背包九讲中的很多模型本质都是两种模型:01背包模型、完全背包模型。大家可以把这两种模型理解透彻,然后再看其他模型,这样必定事半功倍。

    看《背包九讲》的过程中开了一个专题,大概26道题目,主要是Hdu和Poj的题目,题目有难有易,这次的专辑主要讲解这些题目,还有一些Uva的简单背包问题也会加入到这个专辑中。本专辑都只列举基本思路,如果大家想看详细思路或者代码请去我博客中查找,大部分题目我都有写解题报告。


   一、01背包问题 (先枚举物品,再逆序枚举容量)

1、Hdu 2602 Bone Collector 非常常规的01背包问题,用一维和二维数组都可以做,一维快相当多。
      2、Poj 3624 Charm Bracelet  赤裸裸的01背包问题
      3、Hdu 2546 饭卡 n种菜选若干种使剩下的钱最少,背包容量是开始时的钱,物品体积是菜的价格,状态转移时记录答案。
      4、Uva 624 CD 常规的01背包,但要输出路径,状态转移时记录当前状态下当前物品是否被选用,然后递归求解就好。
      5、Uva 562 Dividing coins 平衡问题,将n个硬币的总价值累加得到sum,再用sum/2作为背包容量对n个硬币做01背包处理,看能组成的最大容量是多少。
      6、Hdu 2955 Robberies (推荐)抢劫方案最优问题,需要一个简单地转换,我们求的是不被抓的概率而非被抓的概率,各个银行的储蓄总和为背包容量,体积为单个银
           行 的储蓄,价值为不被抓概率。
       7、Poj 2184 Cow Exhibition(推荐)变形的01背包,其实问题的本质是保证智商和幽默感和不为负数情况下的最大和。智商属性体积,幽默感属性为价值,问题转换为
           求体积大等于0时的体积、价值总和。
      8、Hdu 2639 Bone Collector II  求价值第K大的01背包问题,技巧是多加一维表示第k大时的价值,转移的时候用两个有序数列合并的方法不断更新第二维。
       9、Poj 2923 Relocation(推荐,较综合) 用到状态压缩思想的01背包。先枚举选若干个时的状态,总状态量为1<<n,判断集合里的物品能否一次运走,如果能运走,那
           就把这个状态看成一个物品。预处理完找到tot个物品,再对这tot个物品进行01背包处理,每个物品的体积是state[i],价值是1,求必选n个物品的最少价值。状态转
移方程:dp[j|k] = min(dp[j|k],dp[k]+1) (k为state[i,1<=j<=(1<<n)-1])
     10、Hdu 3466 Proud Merchants 与顺序有关的01背包,先按q-p排序再来处理,难想容易敲。
11、Hdu 2126 Buy the souvenirs  n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数。加一维表示已经买几件物品。
12、Hdu 4281 Judges' response(推荐,综合题)  和以上第9的思路差不多,但这题的判断条件更简单,本题还有一问是mTSP,甚是经典。详细题解见Here

    二、完全背包问题(先枚举物品,再正序枚举容量)

1、 Uva 674 Coin Change 完全背包求解方案数问题,只有5种硬币,基础题。
2、 Uva 147 Dollars 上一题的加强版,硬币有11种,另外这题用double输入,要考虑精度问题。
3、 Poj 3181 Dollar Dayz   必须 用高精度模拟的完全背包。
4、Poj 1787 Charlie's Change  这题本来是多重背包的题目,但是完全背包求解速度奇快。
  5 Poj 3260 The Fewest Coins(推荐,较综合)  完全背包和多重背包混合题,先用完全背包预处理煤老板找钱的最小硬币数,再用多重背包求用到的最小硬币数。
6 Poj 2063 Investment  求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币。
7、3623 Battle Ships   建塔打大怪兽,有n种塔,任意建多少个,建塔有时间,建好的塔可以一直打怪兽。把时间当作容量,把打对方多少血当作价值。
8 、Zoj 3524 Crazy Shopping (推荐)  拓朴排序+完全背包,先拓朴排序,注意可能有好几个起点,然后按照拓扑序转移,每转移一次就对下一个点进行完全背包,同时注意更 新所用的能量。 
     9、Zoj 3662 Math Magic  刚结束的长春区域赛的H题,把每个m的因子当作物品,要求我们随便选k个物品,使得这些物品的总和为n,Lcm为m。dp[i][j][k]表示选了i个物品,和为jlcm为k的方案数,具体做法是先预处理找出m的所有因子,这样不管怎么选,最后都有可能Lcm为m,免除很多无必要的计算,然后用这类背包的方法进行转移。

      1、Hdu 1114 Piggy-Bank  简单多重背包,但当成01背包来暴力也完全没有问题,
      2、Hdu 1059 Dividing 简单多重背包,体积为硬币数,价值为币值,可用二进制处理成01背包求解,可用30对num进行优化。
      3、Hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 标题超长超简单的多重背包,可用01背包求解。
      4、Poj 1276 Cash Machine 多重背包,需用二进制处理成01背包求解,体积是硬币数量,价值是币值。
      5、Poj 2392 Space Elevator 最大容量不定的多重背包,体积是每种木块的高度,由于可行性问题无价值这个概念。

       1、Hdu 1712 ACboy needs your help 选课复习问题,没门课只能选一次,找个时间复习,求最大的收益。每门课对应一组,每个时间对应一个物品。
       2、Hdu 3033 I love sneakers!  xx买鞋问题,分组背包的变形,每种牌子至少选一双,这与分组的最多选一个不一样,但思想一样,物品为每种牌子的各种鞋子。
       3、Poj 1837 Balance 平衡问题,把每个砝码在每个位置的权值算出来,每个砝码一个分组,几个位置几个物品,最后求的是价值和为0的方案数。
       4、Poj 3211 Washing Clothes Show幸福题,每种颜色的衣服的分到一组,费用是洗一件衣服的时间,每组求解出最少时间,再逐组累加起来。
       5、Hdu 3810 Magina (推荐,综合)  搜索加分组背包,分组背包必须用单调队列模拟,因为容量特别大,没办法按照常规进行转移。
       6Hdu 3535 AreYou Busy  (推荐,混合背包),各种背包混合,要求对01、完全、多重背包都有深入的理解。

2、Hdu 1011  Starship Troopers  和上题相似,要选择父节点必先子节点,特判m为0的时候。
3、Poj 1947 Rebuilding Roads 求最少删除几条边使得子树节点个数为p,具体的模型和上题很像。解题报告 Here
4、Hdu 1561 The more, The Better 在一棵树上选择若干个点获得的最大价值,选子节点必须先选父节点,求解情况和上两题相同。解题报告 Here
5、Hdu 4003 Find Metal Mineral (推荐,好题) 树形DP+选且只能选一个物品的分组背包,状态转移方程难想。解题报告 here
6、Poj 2486 Apple Tree 树形DP+分组背包,但是状态转移方程要分三步,较为难想。解题报告 Here
7、Poj 3345 Bribing FIPA  树形DP+分组背包,和前面几题相比没有特殊的地方,只是要注意输入。具体可见 Here
8、Hdu 4044 GeoDefense 树形DP+分组背包,要求从每个儿子结点获取最小的hp,然后找这些儿子的最大组合,不是特别好想。解题报告见 Here
       9、Zoj 3627 Treasure Hunt II  树形DP +分组背包,浙大月赛的水题,很普通的树形背包。

这篇关于DP_背包专辑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075420

相关文章

上海邀请赛 A题目 HDU 5236(dp)

先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。 #include<cstdio>#include<cstdio>#include<cmath>#include<queue>#include<stack>#include<string>#include<cstring>#include<iostream>#include<map>

poj 3160 Father Christmas flymouse 强连通+dp

首先我们可以确定的是,对于val值小于0的节点都变成0.   假设一个集合内2个房间都能任意到达,那么我就可以吧集合内的所有点的价值都取到,并且可以达到任一点。实际上集合内的每个点是相同的,这样的集合就是一个强连通分量。 那么我们就可以用tarjin算法进行强连通缩点, 最后形成一个dag的图。在dag的图上面进行dp。可以先用拓扑排序后dp。或者建反响边记忆化搜索 。 VIEW

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{移除元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦,然后流了一身汗,然后没起来,九点多才起床背书。十点钟才开始把昨天那道题题目过一遍,然后十一点才开始复习题目,为了不耽误下午的时间,所以这里的就单纯做已经做过的题目,主打一个有量,不在学

采药问题 01背包

Description:辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

动态规划DP--斐波那契数、爬楼梯、使用最小花费爬楼梯等示例代码

动态规划DP 文章目录 动态规划DP509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62. 不同路径63. 不同路径II343.整数拆分 509. 斐波那契数 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) =

如何用动态规划解决0-1背包问题(C语言实现)

对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制前提下,背包中物品总重量的最大值是多少?假设此时是5个物品,2,2,4,6,3,然后背包最大承载两是9. 假如我们使用回溯算法解决该问题, 代码如下 int maxW = 0; //最大重量int n = 5; //物品数目int w = 9; // 背包最大重量int weight[] = {2,2,4,

从网易校招编程题谈起,轻松理解有趣的0-1背包问题

从网易的一道算法题开始 最近在准备春招实习,偶然做到网易的一道编程题,一方面找了很多博客看的云里雾里,这里特别写下解题的思路和逻辑,一方面加深印象,另一方面供需要的你学习参考。好了,话不多说,开始吧。本文提供思路,并给出Java代码实现例子,供大家参考。 先睹为快 来源:网易2017春招笔试真题编程题 时间限制:1秒 空间限制:32768K 一种双核CPU的两个核能够同时的处理任务,现在有

算法学习014 0-1背包问题 c++动态规划算法实现 中小学算法思维学习 信奥算法解析

目录 C++0-1背包 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C++0-1背包 一、题目要求 1、编程实现 有 N 件物品和一个容量为 M的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。 2、输入输出 输入描述:第一行输入两个整数,分别表示

状态压缩DP——AcWing 291. 蒙德里安的梦想

状态压缩DP 定义 状态压缩DP是一种利用二进制数来表示状态的动态规划算法。它通过将状态压缩成一个整数,从而减少状态数量,提高算法效率。 运用情况 状态压缩DP通常用于解决具有状态转移和最优解性质的问题,例如组合优化、图论、游戏等问题。它的基本思想是将问题的状态表示为一个二进制数,其中每一位表示一个元素或一个状态。通过对二进制数的位运算,可以方便地进行状态转移和最优解的计算。 注意事项

算法基础精选题单 动态规划(dp)(区间dp)(个人题解)

目录 前言: 正文:   题单:【237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com) NC50493 石子合并: NC50500 凸多边形的划分: NC235246 田忌赛马: NC13230 合并回文子串: NC16645 [NOIP2007]矩阵取数游戏: NC207781 迁徙