
CF版刷DP
B丶atty
默默地写代码,后续博客请移步blackBatty.gitee.io
展开
-
[CF1249F] Maximum Weight Subset
Maximum Weight Subset题意:给你一棵树,每个节点都有一个权值。选若干个点两两距离大于kkk且点权和最大。分析:树形dpdpdp。设dp[i][j]dp[i][j]dp[i][j]表示以iii为根的子树种距离iii为jjj的答案。则我们最后的答案肯定是res=max(res,dp[i][j])res = max(res, dp[i][j])res=max(res,dp[i][j]),当 0≤j≤k+1\ 0 \le j \le k+1 0≤j≤k+1。#in原创 2020-05-12 18:58:36 · 347 阅读 · 0 评论 -
[CF1043F] Make It One
Make It One题意:题意很简单,给你一个长度为nnn的数组aaa,让你求最小的子集,使得他们的gcd=1gcd=1gcd=1,输出最小子集的长度,没有则输出-1。分析:这类题还是很经典的,我们先观察它的数据范围是3×1053 \times 10^53×105,所以我们素数最多前7个就可以了。因为前7个素数相乘就已经超过了那个范围。我们设dp[i][j]dp[i][j]dp[i][j]表示取iii个数,gcdgcdgcd为jjj的集合最小数。然后考虑状态转移方程。dp[i][j]=Ccn原创 2020-05-12 18:57:39 · 361 阅读 · 0 评论 -
[CF632E] Thief in a Shop
Thief in a Shop题意:你有nnn种商品,每种商品有无数个和单价,你只能买kkk个商品,让你从小到大输出所有可能的价格。分析:完全背包。一开始总是会搞浑数量和价格。我们设dpidp_idpi表示的价格为iii的最小商品数,不难得出转移方程:dp[i]=min(dp[i],dp[i−a[j]]+1)dp[i] = min(dp[i], dp[i - a[j]] + 1)dp[i]=min(dp[i],dp[i−a[j]]+1)然后我们对单价进行排序,然后所有的商品都减去a1a_1a1原创 2020-05-12 18:54:34 · 344 阅读 · 0 评论 -
[CF708C] Centroids
Centroids题意:把题意抽象出来就是给你一棵树,你可以删掉一个边,此时会变成两棵树,然后把其中一棵的断点接到另一棵树的任何一个节点上。问对于树上每一个节点,能否通过最多一次改操作,把该点变为树的重心。分析:题意还挺绕昂。。。首先我们可以确定的是,对于一个节点,与其相连的所有子树中:当节点数均≤n2\le \frac{n}{2}≤2n时,我们不需要任何操作,此节点就是重心。当节点数>n2> \frac{n}{2}>2n的子树不止一棵的时候,我们肯定不能在最多一次的原创 2020-05-12 18:53:20 · 476 阅读 · 1 评论 -
[CF815C] Karen and Supermarket
Karen and Supermarket题意:有nnn个商品,第i个商品的价格为cic_ici美元,优惠劵did_idi美元,对于i≥2i \ge 2i≥2,使用优惠劵的前提是必须先使用xix_ixi的优惠劵。现问你bbb美元最多能买多少个商品?分析:很明显,是一道有依赖的背包问题,树形背包。这也是我做的第一道树形背包。我们设dp[u][cnt][0/1]dp[u][cnt][0/1]dp[u][cnt][0/1]表示以uuu为根的子树中,uuu用或不用优惠劵选了cntcntcnt个商品的原创 2020-05-12 18:51:19 · 233 阅读 · 0 评论 -
[CF295C] Greg and Friends
Greg and Friends这题是真想不到,虚脱ing。题意:就是有nnn个人要过河,这nnn个人中每个人体重要么是50千克,要么是100千克,现在有一艘船最多能承载kkk千克的重量,问你最少需要多少次能将所有人全部运过去(船上必须至少有一个人来开船),同时问你在最少的前提下的方案数是多少。分析:偏暴力的组合数DP吧。数据不大,我们可以统计出Num50kgNum_{50kg}Num50kg和Num100kgNum_{100kg}Num100kg,然后枚举出他们可能出现的情况。设dpij原创 2020-05-12 18:49:29 · 211 阅读 · 0 评论 -
[CF520E] Pluses everywhere
Pluses everywhere题意:给你一个nnn位数aaa,让你在这些数之间添加kkk个+++号,然后得到一个合法表达式,求所有可能的不同的合法表达式之和,答案对109+710^9 + 7109+7取模。分析:题意很简单,但要怎么去想呢?这可以说是一道计数dp的题吧。我们可以单独的考虑每一位aia_iai的贡献,首先可以肯定的是,一共有n−1n - 1n−1个位置可以放+++号,然后我们根据离aia_iai最近且在aia_iai之后的+++号位置进行讨论:最近的一个加号在aia_i原创 2020-05-12 18:48:02 · 276 阅读 · 0 评论 -
[CF675E] Trains and Statistic
Trains and Statistic题意:有nnn个火车站,每个火车站都有一个值aia_iai表示从站台iii出发可以坐车到[i+1,ai][i + 1, a_i][i+1,ai],设dijd_{ij}dij表示从iii坐到jjj最少需要坐几辆车,让你求∑i=1n∑j=i+1ndij\large\sum_{i = 1}^{n}\sum_{j = i + 1}^{n}d_{ij}∑i=1n∑j=i+1ndij分析:这题从前往后不太好求,我们可以从后往前推。设dpidp_idpi表示原创 2020-05-12 18:46:26 · 232 阅读 · 0 评论 -
[CF559C] Gerald and Giant Chess
Gerald and Giant Chess题意:给你一个h×wh\times wh×w的网格和nnn个黑点,问你从(1,1)(1, 1)(1,1)到(h,w)(h, w)(h,w)且不经过那nnn个黑点的方案数,你只能向下或者向右走,答案对109+710^9+7109+7取模。分析:首先我们分析没有一个黑点的方案数,即我们只需要向下走h−1h-1h−1步,向右走w−1w - 1w−1步。那么也就是在这h+w−2h + w - 2h+w−2步中我们选择h−1h - 1h−1步向下走,即方案数为Ch+原创 2020-05-12 18:42:47 · 455 阅读 · 0 评论