随笔分类 -  DP

摘要:题意:给一棵N个点的树,对应于一个长为N的全排列,对于排列的每个相邻数字a和b,他们的贡献是对应树上顶点a和b的路径长,求所有排列的贡献和。思路:对于任意的xy,其在全排列中相邻的组合数是(n-1)!*2,这样题目意思就明了了,求一棵树中任意两点距离和,边上有权重。贡... 阅读全文
posted @ 2018-08-27 23:48 MCQ 阅读(142) 评论(0) 推荐(0)
摘要:方法:分组背包。题意:某人要买鞋子,有k种鞋,要求每种鞋至少买一双,给出每双鞋子的花费和价值,问m元钱可以买到的鞋子的最大价值是多少。思路:背包九讲讲的是每组至多选一个,此题是每组至少选一个,所以dp[i][j]代表前i组money为j最多买到的价值。初始化方面要注意... 阅读全文
posted @ 2018-05-21 19:17 MCQ 阅读(121) 评论(0) 推荐(0)
摘要:思路:二维背包,确定什么是背包很重要,然而我对这方面还是不熟练,此题用s(杀怪的个数)和忍耐度m作为背包的两个容量,如果价值(经验)大于等于n,则升级,借助中间变量ans来找到最小忍耐值,如果最小忍耐值大于m,则输出-1,否则输出m-ans。#includeusing... 阅读全文
posted @ 2018-05-20 21:30 MCQ 阅读(132) 评论(0) 推荐(0)
摘要:思路:多重背包,dp[i]表示价格总数为i能凑出来的最大价格,比模板多了的唯一一点是查多少数字出现过,枚举一遍dp[i]==i的个数。#includeusing namespace std;#define inf 0x3f3f3f3f#define ll long l... 阅读全文
posted @ 2018-05-20 19:48 MCQ 阅读(96) 评论(0) 推荐(0)
摘要:这是一个多重背包的模板,也是十分好用的一种模板,因为这个比直接拆除01 背包来做要省些时间。这是为啥呢,首先先由我讲一下为什么能换成01 背包吧。 举个例子。假如给了我们 价值为 2,但是数量却是10 的物品,我们应该把10给拆开,要知道二进制可是能够表示任何数的,... 阅读全文
posted @ 2018-05-19 15:44 MCQ 阅读(221) 评论(0) 推荐(0)
摘要:题意:告诉你有n个结点,f(i)表示度为i的结点的cool值,现在你需要做的就是加n-1条边,构成一棵树,并使得这棵树的每个结点的cool值之和,即coolness最大,输出最大的coolness。思路:完全背包。知识点:有n个结点的树有2*n-2个度(入度+出度)。... 阅读全文
posted @ 2018-05-19 11:55 MCQ 阅读(139) 评论(0) 推荐(0)
摘要:每种硬币数量不限,所以是完全背包。条件必须在装满的情况下,求最小价值,那么初始化变为装满的情况(背包九讲)和max变为min。如果遍历完物品后满容量的dp值没有被改变则说明这些硬币无法组成这个容量。由于数据10000,所以就不用二维的了。#includeusing n... 阅读全文
posted @ 2018-05-18 22:17 MCQ 阅读(106) 评论(0) 推荐(0)
摘要:把a-b*k视为重量,a视为价值,背包,因为a-b*k有负数情况,所以要考虑负数容量的情况把a-b*k视为重量,是因为这样就可以叠加,当a=b*k时,也就是重量为0的状态, 初始没有物品时,重量也为零,所以dp数组初始化要讲重量为0(dp【0】)赋为零,而其余状... 阅读全文
posted @ 2018-05-18 18:14 MCQ 阅读(155) 评论(0) 推荐(0)
摘要:DP思路:先拿5元出来,对价格排序,把最大的先放一边,对剩下的01背包。状态转移方程: dp[j]=max(dp[j],dp[j-a[i]]+a[i]);注意:1、n=1时直接输出m-a[0];2、musing namespace std;#define inf 0x... 阅读全文
posted @ 2018-05-17 20:28 MCQ 阅读(133) 评论(0) 推荐(0)
摘要:思路:DP+一维数组(滚动数组)一般的状态转移方程是:dp[i+1][j]=max(dp[i][j],dp[i][j-w[i]]+v[i]此题用二维数组会超内存。如图:状态转移方程:dp[j]=max(dp[j],dp[j-w[i]]+v[i]);#include#i... 阅读全文
posted @ 2018-05-17 17:31 MCQ 阅读(164) 评论(0) 推荐(0)
摘要:思路:背包问题,原先想的是把概率当做背包,在这个范围内最多能抢多少钱。但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用。二是最大不被抓概率不是简单的累加。二是p = (1-p1)(1-p2)(1-p3) 其中p为最大不被抓概率,p1,p2,p... 阅读全文
posted @ 2018-05-17 17:18 MCQ 阅读(107) 评论(0) 推荐(0)