![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
动态规划(DP)
文章平均质量分 84
动态规划(DP)
幽影相随
这个作者很懒,什么都没留下…
展开
-
HDU 2167 Pebbles(状态压缩)
PebblesYou’re given an unlimited number of pebbles to distribute across an N x N game board (N drawn from [3, 15]), where each square on the board contains some positive point value between 10 and 99, inclusive. A 6 x 6 board might look like this:The pla原创 2021-02-05 20:58:36 · 147 阅读 · 0 评论 -
51nod 1677 treecnt(树形 dp,逆元,贡献)
1677 treecnt给定一棵n个节点的树,从1到n标号。选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少。现需要计算对于所有选择k个点的情况最小选择边数的总和为多少。样例解释:一共有三种可能:(下列配图蓝色点表示选择的点,红色边表示最优方案中的边)选择点{1,2}:至少要选择第一条边使得1和2联通。选择点{1,3}:至少要选择第二条边使得1和3联通。选择点{2,3}:两条边都要选择才能使2和3联通。输入第一行两个数n,k(1<=k<=原创 2020-12-25 11:13:33 · 116 阅读 · 0 评论 -
51nod 1371 填数字(三维 dp)
1371 填数字有n行格子,第i(1<=i<=n)行有i个格子,每行格子是左对齐。现在要在每一个格子填入一个非负整数,最后使得每一行每一列的和都不超过2。请计算有多少种方案,答案比较大,请输出对100,000,007(1e8+7)取余后的结果。下图是n=4的时候格子的摆放。输入第1行:给出一个整数n (1<=n<=200)。输出对于每个测试用例,输出结果占一行。输入样例1输出样例3代码#include <iostream>#include &转载 2020-12-02 18:53:02 · 127 阅读 · 0 评论 -
51nod 1033 骨牌覆盖 V2(矩阵快速幂、状压dp)
1033 骨牌覆盖 V2在mn的一个长方形方格中,用一个12的骨牌排满方格。问有多少种不同的排列方法。(n <= 5)例如:3 * 2的方格,共有3种不同的排法。(由于方案的数量巨大,只输出 Mod 10^9 + 7 的结果)输入2个数M N,中间用空格分隔(2 <= m <= 10^9,2 <= n <= 5)输出输出数量 Mod 10^9 + 7输入样例2 3输出样例3题解在一行中,最多有5个空格,两种状态,即竖着放一个骨牌,或横着放一个骨牌,最多原创 2020-11-30 23:20:34 · 289 阅读 · 0 评论 -
51nod 1259 整数划分 V2(分块dp)
1259 整数划分 V2题目将N分为若干个整数的和,有多少种不同的划分方式,例如:n = 4,{4} {1,3} {2,2} {1,1,2} {1,1,1,1},共5种。由于数据较大,输出Mod 10^9 + 7的结果即可。输入输入1个数N(1 <= N <= 50000)。输出输出划分的数量Mod 10^9 + 7。输入样例4输出样例5题解分块DP复杂度O(n*sqrt(n))设m = sqrt(n)我们可以先考虑使用1~m凑成数的方案, 完全背包即可对于转载 2020-10-16 11:27:33 · 241 阅读 · 0 评论 -
Girls Band Party(分组背包)
Girls Band Party题目You are currently playing a game called “Garupa”. In an event of the game, you are trying to get more event points. You have n cards, each with its own name, color, and power. When you play the game, you can put five cards of different转载 2020-09-27 18:26:18 · 250 阅读 · 0 评论 -
51nod 1487 占领资源(RMQ,暴力,离散化)
1487 占领资源借鉴:https://blog.csdn.net/haut_ykc/article/details/77926590具体就是枚举一个保护塔的位置,然后处理出来所有和这个保护塔有所冲突的位置以及不冲突的位置。有所冲突的位置不会超过k2个,所以暴力就行,不冲突的位置我们可以考虑用RMQ。总复杂度为O(n * m * k3)。题意有一个矩形区域被划分为N行M列的网格,每个格子里有一定数量的资源并记录在矩阵val中,坐标(x,y)位置上资源量为val[x][y],其val中每个元素的值原创 2020-09-13 17:20:46 · 102 阅读 · 0 评论 -
RMQ(区间最值查询 模板)
RMQ(Range Minimum/Maximum Query)目的:针对多次询问区间的最值问题。RMQ算法一般用较长时间做预处理。时间复杂度:为O(nlogn),可以在O(1)的时间内处理每次查询。解释二维数组 dp[i][j] 表示从第 i 位开始连续 2j 个数中的最小值。求 dp[i][j]dp[i][j]dp[i][j] 的时候可以把它分成两部分:第一部分是从 iii 到 i+2j−1−1i+2^{j-1}-1i+2j−1−1,第二部分从 i+2j−1i+2^{j-1}i+2j−1原创 2020-09-13 16:43:10 · 148 阅读 · 0 评论 -
石子归并(区间 dp 模板)
石子归并有N堆石子排成一排,其中第i堆的石子的重量为Ai,现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆合并成新的一堆,形成的新石子堆的重量以及消耗的体力都是两堆石子的重量之和。求把全部N堆石子合并成一堆最少需要消耗多少体力。代码#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <iostream>using n原创 2020-09-13 00:10:42 · 299 阅读 · 0 评论 -
51nod 1154 回文串划分(Manacher,dp)
1154 回文串划分题目有一个字符串S,求S最少可以被划分为多少个回文串。例如:abbaabaa,有多种划分方式。a|bb|aabaa - 3 个回文串a|bb|a|aba|a - 5 个回文串a|b|b|a|a|b|a|a - 8 个回文串其中第1种划分方式的划分数量最少。输入输入字符串S(S的长度<= 5000)。输出输出最少的划分数量。输入样例abbaabaa输出样例3#include <cstdio>#include <iostream>原创 2020-08-28 13:03:50 · 115 阅读 · 0 评论 -
Harmony Pairs(数位 dp)
Harmony Pairs题目描述Roundgod is obsessive about numbers. Let S(x)S(x)S(x) be the sum of the digits of xx in decimal notation, (A,B)(A,B)(A,B) is a harmony pair if and only if S(A)>S(B)S(A)>S(B)S(A)>S(B). Roundgod is given NNN, and she wants to coun原创 2020-07-28 12:44:02 · 382 阅读 · 0 评论 -
Level Up(dp,倒序)
Level Up题目Being a fan of MMORPGs, Steve was really excited when World of Warcraft Classic was announced. He started playing from the first day and now has only two levels to go till the maximum leve...原创 2020-04-14 15:24:44 · 543 阅读 · 0 评论 -
Fabricating Sculptures(dp,前缀和)
Fabricating SculpturesMiguel Angelo is a great sculptor, widely recognized for his outdoor sculptures. In his hometown, it is very common to find one of his creations in squares and gardens. People l...转载 2020-04-10 23:22:22 · 438 阅读 · 0 评论 -
二分图染色(dp 数学)
二分图染色(弱化版)给定一个完全二分图,图的左右两边的顶点数目相同。我们要给图中的每条边染成红色、蓝色、或者绿色,并使得任意两条红边不共享端点、同时任意两条蓝边也不共享端点。计算所有满足条件的染色的方案数,并对10^9+7取模。输入描述:二分图单边的顶点数目n(n ≤ 10^7)输出描述:输出一个整数,即所求的答案。输入2输出35二分图转换为棋盘问题两边不共享端点的问题可以...转载 2019-12-04 22:30:31 · 1003 阅读 · 0 评论 -
Coins(多重背包)
Coins题意:Silverland的人们使用硬币,硬币的面值为A1, A2, A3, ……, An“Silverland元”。有一天,Tony打开他的钱箱,发现里面有一些硬币。他决定在附近的一家商店买一只非常漂亮的手表。他想要按照价格准确地支付(没有找零),他知道价格不会超过m,但他不知道手表的准确价格。请您编写一个程序,输入n, m, A1, A2, A3, ……, An以及C1, C2...原创 2019-08-02 19:03:02 · 1771 阅读 · 0 评论 -
Piggy-Ban(完全背包)
Piggy-Bank题意:ACM在做任何事情之前,必须编制预算以获得必要的财政经费支持,而财政经费的来源则来自“不可逆转的束缚货币”(Irreversibly Bound Money,IBM)。这一做法的思想很简单。某个ACM成员只要有一点零钱,他就要把所有的硬币都扔进一个储蓄罐。如您所知,这个过程是不可逆的,如果不打破储蓄罐的话,硬币就不能被取出。在足够长的时间之后,储蓄罐里就会有足够的钱来...原创 2019-08-02 15:17:51 · 1148 阅读 · 0 评论 -
Dollars(完全背包)
Dollars题意:新西兰的货币由100元,50元,20元,10元和5元的纸币和2元,1元,50分,20分,10分和5分的硬币组成。请编写一个程序,对于任何给出的货币数量,确定可以由多少种方式构成这个数量。更改排列顺序,并不会增加计数。20分由4种方式构成:1 * 20分,2 * 10分,10分 + 2 * 5分以及4 * 5分。输入输入由一个实数序列组成,每个实数一行,不超过300.00...原创 2019-08-02 14:41:58 · 1345 阅读 · 1 评论 -
背包问题概念
01背包:一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物品只有一个),每个物品的价值W[i]和占用空间C[i]都会由输入给出,现在问这个背包最多能携带总价值多少的物品?完全背包:完全背包问题和基本的 0-1 背包问题非常类似,区别就是在完全背包问题中,每种物品有无限件。多重背包:相应于完全背包问题,多重背包问题的每个物品多了数目限制,因此初始化和递推公式都需要修改。混合...原创 2019-08-02 11:38:48 · 1490 阅读 · 0 评论 -
The Fewest Coins (混合背包)
有的物品只可以取一次或不取(基本的0-1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),就是混合背包问题。...原创 2019-08-02 19:32:34 · 1250 阅读 · 0 评论 -
Space Elevator(多重背包)
相应于完全背包问题,多重背包问题的每个物品多了数目限制,因此初始化和递推公式都需要修改。设 f[ i ][ v ] 表示前i种物品放入一个载重最大为 v 的背包的最大价值。初始化时,只考虑第一件物品,f[ 1 ][ v ] = min( p1 * num1, p1 * v / w1 )。计算考虑前i件物品放入一个载荷能力为 v 的背包的最大价值f[ i ][ v ]时,递推公式考虑两种情况:要...原创 2019-08-02 16:15:21 · 1568 阅读 · 0 评论 -
Dollar Dayz(完全背包 + 高精度)
完全背包完全背包问题和基本的 0-1 背包问题非常类似,区别就是在完全背包问题中,每种物品有无限件。从每种物品的角度考虑,求解完全背包问题的策略由对某种物品取或者不取变成了取0件、取1件、取2件……等很多种。按基本的01背包问题求解算法的思路,设 f[ i ][ v ] 表示前i种物品恰放入一个载荷能力为 v 的背包的最大价值。则状态转移方程为 f[ i ][ v ] = max{ f[ i ...原创 2019-08-02 13:33:38 · 1610 阅读 · 0 评论 -
01背包问题
01背包问题时间限制: 3 Sec 内存限制: 128 MB题目描述已知有N种物品和一个可容纳C重量的背包。每种物品i的重量为Wi,价值为Pi。那么,采用怎样的装包方法才会使装入背包物品的总价值最大。输入包含多组测试数据。第一行为一个整数T(1<=T<=10),代表测试数据个数。接下来有T组测试数据。每组测试数据第一行为背包的重量C(C<10000)和物品个数N(N...原创 2019-06-13 20:42:31 · 1459 阅读 · 0 评论 -
简单环(状压 dp,详细注释)
简单环题目描述给定一张n个点m条边的无向图,求出图中所有简单环的数量。(简单环:简单环又称简单回路,图的顶点序列中,除了第一个顶点和最后一个顶点相同外,其余顶点不重复出现的回路叫简单回路。或者说,若通路或回路不重复地包含相同的边,则它是简单的)输入描述:第一行三个数n m k (k在输出描述中提到)接下来m行每行两个数u,v表示u到v之间存在一条边(无重边)输出描述:输出k行每行1个...原创 2019-10-06 15:25:22 · 3546 阅读 · 2 评论 -
Balancing Act(树形 dp 树的重心)
Balancing Act题意找一个树的重心,模板。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int maxn = 1e6 + ...原创 2019-10-29 22:30:35 · 343 阅读 · 0 评论 -
Perfect Service(树形 dp 模板)
Perfect Service题意有 n (n≤0000) 台机器形成树状结构。要求在其中一些机器上安装服务器,使得每台不限服务器的计算机恰好和一台服务器计算机相邻。求服务器的最少数量。#include <iostream>#include <cstdio>#include <cstring>#include <queue>#inclu...原创 2019-10-27 20:05:57 · 263 阅读 · 0 评论 -
Party at Hali-Bula(树形 dp)
Party at Hali-Bula#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <vector>#include <map>#include &l...原创 2019-10-26 12:02:50 · 107 阅读 · 0 评论 -
Computer(树形 dp)
Computer#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int maxn = 11000;struct node { int u, v, w; //根节点 in...原创 2019-10-24 19:54:10 · 81 阅读 · 0 评论 -
Another Crisis(树形 dp 基础)
Another Crisis#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <vector>using namespace std;const int maxn...原创 2019-10-24 19:51:40 · 254 阅读 · 0 评论 -
Pangu and Stones(区间 dp)
Pangu and Stones 状态转移方程#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;#define ll long long#defin...转载 2019-11-21 15:17:52 · 113 阅读 · 0 评论 -
[HAOI2008]玩具取名(区间 dp)
玩具取名题目描述某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。输入描述:第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。接下来W行,每行两个...转载 2019-10-19 16:18:18 · 230 阅读 · 0 评论 -
小小粉刷匠(区间 dp)
小小粉刷匠题目描述“lalala,我是一个快乐的粉刷匠”,小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,“小名,你今天如果刷不完这一栋楼的墙,那么你就等着被炒鱿鱼吧”,老板声嘶力竭的吼着。苦恼的小名因为不想被炒鱿鱼,所以希望尽量快地刷完墙,由于他本人的数学基础很差,他现在请你来帮助他计算最少完成每一堵墙需要刷多少次。每一面墙有n个段,对于每个段指定一个目标颜色ci。刚开始的时候所有...原创 2019-10-19 14:26:30 · 151 阅读 · 0 评论 -
String painter(区间 dp)
String painter#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <iostream>using namespace std;#define ll long long#define inf 0x3f...原创 2019-10-07 15:52:06 · 131 阅读 · 0 评论 -
You Are the One(区间 dp)
You Are the One题意男孩子们上台,每人有自己的不高兴值,第 k 个等待的人不高兴值成 ( k - 1 ) * D,有一个栈可以暂时存放男孩子(让他晚上台),求最小的总不高兴值。#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#in...原创 2019-10-02 11:35:27 · 292 阅读 · 0 评论 -
Food Delivery(区间 dp)
Food Delivery#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;#define ll long long#define inf 0x3f3f3f3fll sum[1200], dp[120...转载 2019-10-01 23:00:29 · 405 阅读 · 0 评论 -
Multiplication Puzzle(区间 dp 模板)
Multiplication Puzzle#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;#define ll long long#define inf 0x3f3f3f3fll a[200], d...原创 2019-10-01 12:17:31 · 127 阅读 · 0 评论 -
Halloween Costumes(区间dp)
Halloween Costumes刚开始学习区间 dp,先练练简单的,本题按列从左到右更新。当两天的需要穿的衣服相同时题意给出 n 天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服再穿需要算新的,问至少要带多少条衣服才能参加所有宴会。代码#include <iostream>#include <cstdio>#include <cstring&g...原创 2019-09-28 20:18:17 · 149 阅读 · 0 评论 -
Brackets Sequence(区间 DP + dfs)
Brackets Sequence题意:输入输入包含在一行中给出的至多100个括号(字符’(’,’)’,’[‘和’]’),其中没有其他的字符。输出输出一行,给出包含了给出序列作为子序列的具有最小可能长度的合法括号序列。#include <iostream>#include <cstdio>#include <cmath>#include &l...原创 2019-08-02 14:18:25 · 1139 阅读 · 0 评论 -
Prince and Princess(最长公共子序列转最长递增子序列)
Prince and Princess注释详见代码直接用最长公共子序列会超时,所以需要转换成最长递增子序列,里面的 n 没用#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <map>using names...原创 2019-10-14 09:07:25 · 128 阅读 · 0 评论 -
Cross the Wall(斜率 dp,模板)
Cross the Wall#include <cstring>#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define ll long long#define maxn 50010ll dp[maxn][110], q[m...原创 2019-10-12 11:16:23 · 507 阅读 · 0 评论 -
MAX Average Problem(斜率 dp,二分,终于找到了一个过的,但是看不懂~~~)
MAX Average Problem直接套模板会超时#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;const int maxn = 1e5 + 1...转载 2019-10-10 11:20:38 · 149 阅读 · 0 评论