dp
iroy33
这个作者很懒,什么都没留下…
展开
-
【分组背包】P1757 通天之分组背包
在记录每组有哪几种物品的时候,我是开了map,组号映射到一个vector,vector里面存着该组的物品的下标。。。#include<iostream>#include<map>#include<cstring>#include<vector>using namespace std;const int N=1e3+10;in...原创 2019-04-18 21:43:45 · 199 阅读 · 0 评论 -
【01背包问题】从小数据到大数据
1、普通01背包for i=1:n for j=0:Wif(j<w[i]) dp[i][j]=dp[i-1][j];else dp[i][j]=max(dp[i][j],dp[i][j-w[i]]+w[i];2、01背包问题之2题目特征:背包重量太大,开不了那么大的数组。普通01背包中的时间复杂度O(nW),现在就不够用了。解决方案:价值...原创 2019-05-02 21:24:39 · 1711 阅读 · 0 评论 -
【最大m子段和】hdu 1024
向那些认认真真写博客,将自己思考精髓记录并分享的人致敬ღ( ´・ᴗ・` )参考博客1参考博客2参考博客3队友博客先看一下最大子段和问题问题描述:N个整数组成的序列a[1],a[2],a[3],…,a[n],找出一个连续序列,和是最大的。状态定义:dp[i]以第i项为结尾的最大子段和状态转移方程:若dp[i-1]>0,dp[i]=dp[i-1]+a[i]; 否...原创 2019-05-02 16:29:52 · 625 阅读 · 0 评论 -
【区间dp】poj 1651 Multiplication Puzzle
题意:区间[1,n]每次从中抽出一张牌,直到只剩下最外面两张牌。 每次抽牌的得分是被抽到的牌左边所有牌的乘积*被抽到的牌*右边所有牌的乘积,问得分之和最小是多少?思路:当区间只有三个数a1,a2,a3的时候得分是a1*a2*a3设ak为最后一次取出来的数,那么最后一次得分只与a1,ak,an有关,把整个区间以k分为两半,那么dp[1][n]=dp[1][k]+dp[k][n]+a[1]...原创 2019-04-14 20:53:46 · 220 阅读 · 0 评论 -
【区间dp】hdu 3506 monkey party 环形石子合并问题
题意:猴大王要介绍在座的每只小猴子互相认识。每次介绍小猴子AB,AB必须相邻,并且介绍A,B后,猴A认识的猴子都会认识猴B认识的猴子,同样猴B认识的猴子都会认识猴A认识的猴子。每只猴子都认识自己。介绍AB的时间成本为猴A认识的猴子权值总数+猴B认识的猴子权值总数。问最少需要多长时间才能使所有猴子相互认识。思路:我算是知道我为什么做啥啥不会了,如果不是提前看到,我想不到这是石子合并的题型。。...原创 2019-04-14 19:57:28 · 226 阅读 · 2 评论 -
背包刷题
//一定要刚好把钱花完,问有多少种方法//dp[i]代表花i钱的方法数#include<iostream>#include<cstring>#include<algorithm>using namespace std;//一定要刚好把钱花完,问有多少种方法//dp[i]代表花i钱的方法数int dp[10010];const int N...原创 2019-04-16 22:11:27 · 138 阅读 · 0 评论 -
【计数dp】P1025 划分数 dp or dfs
首先划分数算是计数dp的一个题型叭,先从《挑战》上讲起挑战上划分可以为0dp[i][j]代表j的i划分每种划分都大于1 dp[i][j-i] 至少存在一种划分为0 dp[i-1][j]dp[i][j]=dp[i][j-i]+dp[i-1][j]若是划分成正整数每种划分都大于1 dp[i][j-i] 至少存在一种划分为1 dp[i-1][j-1]#include&l...原创 2019-04-16 20:23:31 · 167 阅读 · 0 评论 -
【区间dp】 poj 2955 Brackets
首先补充点关于区间dp的知识区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维。然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个区间合并到整个区间,或者说局部最优解合并为全局最优解,然后得解。区间dp专辑题意:给定一个字符串,问最长匹配的括号长度是多少?dp[i][j]代表第i...原创 2019-04-13 18:46:31 · 272 阅读 · 0 评论 -
【记忆化搜索】hdu1428 漫步校园
思路:有几条可到达的路线是很常规的dp,假设u->v ,那么dp[u]+=dp[v]下一步一定要更加逼近终点而不是远离终点,用bfs去跑距(n,n)的最短路径。本题可以与dijkstra堆优化过程中统计最短路条数进行对比:本题:dp[i][j] (i,j)到终点的最短路条数;采用记忆化搜索方式,自下而上dijkstra堆优化:dp[i] 代表起点到i的最短路条数;递推,自...原创 2019-04-12 22:25:01 · 162 阅读 · 0 评论 -
【计数dp】 多重集组合数
关于多重集组合数的博客,看懂了但是没搞明白那么滚动数组,awcsl另一个大佬的推导过程理解的关键在于:选第i种:dp[i-1][j]表示不选第i种不选第i种:dp[i][j-1]可以代表第i种至少选1个,包含了第i种选了a[i]个,它的另一层含义是前i种中选了j个因此要拿dp[i][j-1]-dp[i-1][j-1-a[i]]dp[i][j]=dp[i-1][j]+dp[...原创 2019-04-15 21:47:57 · 275 阅读 · 0 评论 -
【记忆化搜索】UVA 10118 free candy
题意:有四根管道,每根里面有n颗糖,每次只能从管道的最上面拿糖进篮子里。如果篮子里面有两颗颜色一样的糖(数值大小一样),那么Bob可以将这两颗糖揣进自己的口袋里,如果篮子里的糖数为5颗,就结束。问Bob最多能拿到几颗糖思路:将每根管道拿出的糖数num[1],num[2],num[3],num[4]作为一种状态,求解该状态下还能拿多少颗糖留了一个疑惑在返回和输出的地方_(:з」∠)_#...原创 2019-04-11 22:13:56 · 164 阅读 · 0 评论 -
【完全背包或迭代加深搜】P1679 神奇的四次方数
一点点感想和启发,没给个数限制判断能否构成一个数,01背包给了个数限制判断是否能构成一个数,多重部分和问题。 ——by iRoy33 2019/5/2很容易想到dp[j]=min(dp[j],dp[j-i*i*i*i]+1); 一个四次方数但是我么有想到它是完全背包,虽然说它的形式和完全背包一模一样#include<iostream>#include<...原创 2019-04-18 22:48:38 · 262 阅读 · 0 评论 -
【区间dp】Codeforces Round 336 (Div 2) D Zuma
Codeforces Round 336 (Div 2) D Zuma题意:给一个长度为n的字符串,每次可以删掉其中的一个回文子串,问你最少需要删多少次思路:拿到的时候我愣了一下,没想到是区间dp,emm,事实上它和经典区间dp括号匹配是一样的思路dp[i][j]代表i~j删完需要的次数,if(c[i]==c[j]) dp[i][j]=dp[i+1][j-1] (可以和i+1~j-...原创 2019-05-03 21:56:27 · 195 阅读 · 0 评论 -
【背包应用】hdu 6492分宿舍
当时看题以为需要好多种分类讨论,看到题解的dp简单机智...(还是自己dp没学会)dp用的妙#include<cstdio>#include<iostream>#include<cstring>#include<algorith...转载 2019-05-03 22:05:21 · 240 阅读 · 0 评论 -
【dp】hdu 6024 Building Shops
Building ShopsTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3723Accepted Submission(s): 123...原创 2019-06-01 10:45:13 · 146 阅读 · 0 评论 -
【状压dp】 算法提高 金陵十三钗
金陵十三钗 本题难度:难 本题占分比例:5%问题描述 在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔装打扮。但由于天生材质的原因,每个人和每个人之间的相似度是不同的。由于我们这是编程题,因此情况就变成了金陵n钗。给出n个女人和n个学生的相似度矩阵,求她们之间的匹配所能获得的最大相似度。 所谓相似...原创 2019-05-23 18:24:26 · 295 阅读 · 0 评论 -
【环形dp】poj 2228 Naptime
题目链接题意:一天分为N个时间片(可顺到下一天->环形),选择其中B个睡觉。选择第i个时间片能获得u_i点值,但是选择的一个区间内的第一个时间片用来入睡(没睡着),无法获得u_i值。问最大能获得多少u_i值。第一次做环形dp,本以为按照普通环形方式在数组后面复制一遍即可,但没想到这道题可能就考我们如何不MLE?代表前i个时间片,睡了j个时间片得到的最大的utility,由于...原创 2019-05-15 22:51:50 · 1082 阅读 · 0 评论 -
【状态压缩】poj 2836 Rectangular Covering
题意:给出n个平面上的点,用多个矩形去覆盖所有的点,要求每个矩形的边与坐标轴平行,每个都至少覆盖两个点(包含在边上的),如何选择矩形使得面积最小?思路:毫无思路。。。看了题解之后才发现好暴力啊,枚举两个点,得到一个矩形(注意特判横坐标相等或纵坐标相等)。dp[S]代表选了S集合代表的点所需要的最小面积,枚举目前哪些点已经被覆盖,枚举矩形,如果这个矩形能覆盖更多的点,更新新状态需要的最小面积...原创 2019-05-07 22:15:24 · 141 阅读 · 0 评论 -
【状压dp】 poj 3254 Corn Fields
题意:给m*n的场地,1代表可选,0代表不可选,选择的场地不能有边相邻(即不能上下左右四个方向),求选择的方案数,一个也不选也是一种选择方法。思路:dp[i][j]代表考虑了前i行,第i行状态为j的方案数。枚举本行的可行状态,枚举上一行的状态参考博客注意:位运算不加括号很容易出错!注意与P1896 互不侵犯对比区别1:P1896要求一定要放置完所有的国王,由于不知道在哪一...原创 2019-05-07 21:49:46 · 180 阅读 · 0 评论 -
【状压dp】P1896 [SCOI2005]互不侵犯
题目描述在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。注:数据有加强(2018/4/25)输入输出格式输入格式:只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)输出格式:所得的方案数不赞一个嘛?思考...原创 2019-05-07 17:29:22 · 194 阅读 · 0 评论 -
【状压dp】poj 2441 Arrange the Bulls
题意:n头牛m个牛栏,每个牛栏只能有一头牛,每头牛只能被放在自己喜欢的牛栏里,问有多少种方法思路:一开始想开dp[1<<n][1<<m]来标记,发现开不下思路就端了orz参考博客_builtin_popcount()计算二进制中多少个1,采用的是查表的方法说到底,这个函数到底有什么实际用处呢?当然有了,使用一个二进制数字表示一个集合的时候,枚举一个组合(子...原创 2019-05-06 22:16:34 · 153 阅读 · 0 评论 -
【状压dp】poj 3311 Hie with the pie 经典的TSP旅行商问题
题意:披萨店只有一个外卖员,他每次攒1到10个订单会去出去派送一次(好像是无效信息?)。每次派送他都会选择最短路径送到地点后再返回披萨店。(同一个点可以经过两次)第一行给出n个订单,之后n行每行给出n+1个数字代表从第i个地方到第j个地方(不经过其他地方)的距离。i=0表示披萨店。问送完所有披萨并返回披萨店的最小时间是多少。让我们先来看下旅行商问题。对于难以确定递推顺序的问题,...原创 2019-05-06 21:28:33 · 254 阅读 · 0 评论 -
【状压dp】poj 2686 Traveling by Stagecoach
状压dp:针对集合的dp虽然可以把城市看作顶点,道路看作边建图,但是由于有车票相关的限制,无法直接使用Dijkstra算法求解。不过,这种情况下只需要把状态作为顶点,而把状态的转移看成边来建图就可以很好地避免这个问题。让我们考虑一下“现在在城市v,此时还剩下的车票的集合为S”这样的状态。从这个状态出发,使用一张车票i属于S,移动到相邻的城市u,就相当于转移到了“在城市u,此时还剩下的...原创 2019-05-06 19:47:58 · 177 阅读 · 0 评论 -
【状压dp+输出】 poj 1795 DNA Laboratory
题意:给你n个字符串,要求找到一个最小的串,这n个字符串都是它的子串思路:定义dp[j][s]代表以i为开头,状态为j的字符串最小长度,dp[j][s|(1<<j)]=min(dp[j][s|(1<<j)],dp[i][s]+cost[j][i])cost[j][i]是把字符串j拼在字符串i前面使得总长度增加的长度,只需要考虑j的末尾和i的开头有多少相同然后...原创 2019-05-08 17:47:38 · 188 阅读 · 0 评论 -
【状压】P2622 关灯问题II
思路:数据量疯狂暗示是状压dp,或者搜索位运算参考博客状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴。为了更好的理解状压dp,首先介绍位运算相关的知识。1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如3(11)...原创 2019-05-05 21:01:19 · 293 阅读 · 0 评论 -
【记忆化搜索】 poj 1501 zipper
题目:两个字符串str1,str2,将他们混合成另一个字符串str,要求str1,str2保持自己的顺序。给出str1,str2,str,判断str1,str2能不能组成str,用s1,s2,s分别记录目前比较的字符下标思路:对于str中的每一个字符,判断是否有str1或str2里的字符(按顺序)与它匹配退出条件1:当str1和str2都匹配完了,那么就找到构成方案退出条件2:若s...原创 2019-04-11 21:12:54 · 160 阅读 · 0 评论 -
动态规划
每当一个dp问题做错了,都可以参照一下检查自己的认知。动态规划题目性质:重叠子问题+最优子结构递推写法是自底向上,从边界开始不断向上解决问题,直到解决了目标问题递归写法是自顶向下,从目标问题开始,将它分解成子问题的组合,知道分解至边界为止。贪心(类似于自顶向下): 通过策略直接选择一个子问题去求解,没被选择的子问题不去考虑dp(从边界开始得到目标问题的解):对暂时没有被继承的子...原创 2019-03-28 22:19:18 · 93 阅读 · 0 评论 -
多重背包 -> hdu 2844 Coins 多重部分和问题 && hdu 1059
PS:真心后悔没有把大白带回家数组可以重复利用,i是没必要的,否则会MLEhdu 2844 Coins题意:和大白上差不多,a是数值,c是数的个数,问从这些数中选出一些数,能形成多少个m以内(包括m)的结果#include<cstdio>#include<cstring>#include<algorithm>using namespa...原创 2019-02-10 13:45:46 · 236 阅读 · 0 评论 -
hdu 1171 Big event in HDU -------奇怪表述的多重背包
题意:n种设备,给出价值和数目,将它们分成价值A,B的两份,要求AB尽可能的相等且A>=B要尽可能相等,直接把背包容量变为总价值的一半,套个多重背包的模板注意结束条件是负数(哪儿有坑我就踩哪_(:з」∠)_),例子中给-1搞得我以为-1就是结束条件#include<cstdio>#include<algorithm>#include<cstri...原创 2019-02-09 19:16:17 · 127 阅读 · 0 评论 -
hdu 1003 最大连续子序列和及起始位置 && hdu 1087 最大上升子序列和
hdu 1003题意:求最大连续子序列和及起始位置对于动态规划问题要找出其子问题考虑到dp的无后效性,dp[i]表示以i为结尾的最大值当dp[i-1]>=0时,以i-1为值对以i为结尾的值有贡献,否则起始位置变为自己动态地更新最大值 开头和结尾#include<cstdio>#include<cstring>#include<al...原创 2019-02-09 19:12:31 · 291 阅读 · 0 评论 -
hdu 2955 Robbery&&hdu 1203 I need an offer——概率 01背包
hdu2955题意:Roy要去抢劫银行,有n个银行,第i个银行可抢到mi元,被抓风险为pi,问在风险小于P的情况下,Roy最多可以抢到多少钱?dp[i] 偷i的钱最大的逃跑概率 逃跑概率最大的情况去计算钱会很麻烦//%lf自带6位小数#include<cstdio>#include<algorithm>#include<cstring>...原创 2019-02-09 18:59:08 · 152 阅读 · 0 评论 -
hdu2084数塔&&hdu1176免费馅饼&&hdu2571命运——数字三角形问题
特征是只能从相邻的走过来hdu2084数塔题意:要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?从上往下可能性太多不好做,从下往上更新每个点只由两个点更新#include<cstdio>#include<cstring>#include<algorithm>using namespace std;...原创 2019-02-09 18:54:35 · 202 阅读 · 0 评论 -
hdu3199丑数 && hdu1058 humble numbers 小数扩展到大数组成序列
hdu3199 丑数题意:将素因子只有p1,p2,p3的数排序,求第n个数是多少拿小数乘p1,p2,p3不断扩展得到整个序列。比较棒的一个思路是用l1来标记p1应该由序列里第几个数来扩展了用优先权队列的话不好控制重复入队的数#include<cstdio>#include<cstring>#include<algorithm>using...原创 2019-02-09 17:12:35 · 177 阅读 · 0 评论 -
UVA437 The Tower of Babylon DAG 上的DP
题意:有向无环图上的最长路——建图——转移方程和边界d[i]表示从i出发的最长路长度,第一步只能走到相邻点最终答案是所有d[i]中的最大值1、由于同样大小的立方体是无法嵌套的,每输入一个正方体只相当于有三个2、不能用d(a,b)来考虑状态值,如果a,b很大,会有很多浪费掉的空间,(cub[idx],v[c])来标识一个状态,先建图,然后按照DAG模板跑最痛恨 粗心错...原创 2018-12-18 21:50:37 · 133 阅读 · 0 评论 -
UVa1025 A Spy in the Metro
1、处理边界 给边界赋值2、要求从起点到终点的最小/大值,从终点开始遍历3、变量名用了time,UVA报编译错误设dp[i][j]为i时刻从j车站出发的最短路for(int i=终可更新的状态;i>=起;i--) //序 for(从i到j能选择哪几步) ...原创 2018-12-17 22:20:34 · 99 阅读 · 0 评论 -
Uva11400 Lighting System Design
1、看了网上的很多题解,我觉得还是把问题转化成选哪几个电源,dp[i]代表考虑前i个电源后的最小费用,每次用第i个电源去逐个替换前面的电源。2、有人说觉得和最长上升子序列挺相似的,我。。。再悟悟总体的过程就是拿当前最大的电压值对应的灯去挨个替换比它小的存疑:存在电源3去替换电源1但是不替换电源2的情况吗?如果3+2 +solve(1)>3 + solve(...原创 2018-12-21 21:01:19 · 149 阅读 · 0 评论 -
【01背包变种】uva12563Jing Ge Jin Qu 选的种数最多的情况下价值最大
先上一个简单的版本:hdu 2546 饭卡题意:如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负)某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。提前拿出5元买最贵的,剩下的钱01背包 注意最贵的菜可能同时有多个,要控制一下卡上余额最少==菜最贵 dp[i]表示有i元最多能买...原创 2018-12-21 09:14:42 · 189 阅读 · 0 评论 -
多阶段决策问题----多段图的最短路Uva116 Unidirectional TSP
注意只有一列的情况要求字典序很小就先遍历行号小的,再遍历行号大的样例试不出来的bug真是令人头禿按照我代码习惯,我喜欢在开始初始化,导致n=1的情况下,for循环进不去。。。先看数据先看数据先看数据,先想特例先想边界这个和数塔也挺像的,肯定要从最后一列往前去累加#include<stdio.h>#include<algorithm>#inc...原创 2018-12-20 21:16:57 · 348 阅读 · 0 评论 -
需要排序的01背包———>hdu 3466 &&贪心 hdu 3177
看了很多博客,有以下两种思路:以kuangbin神为代表:q-p其实就是不更新的范围,不更新的范围从小到大递增时就不会影响后面的DP了。以很多很多人为代表:对任意两个物品i,j,为了避免上面存在的那种问题,我们可以算出两种顺序所需要的最少金额,若i->j,则至少需要Pi+Qj,若是j->i则至少需要Pj+Qi。如果已知结果是i->j较优的话,则有Pi+Qj<Pj+Q...原创 2019-02-10 19:20:51 · 331 阅读 · 0 评论 -
单机调度问题--dp与贪心
事实上所涉及的贪心和poj 2393很像转载自涉及顺序时候的思考方法好好写一下这题的结题报告。这题带给我的启发挺多的。 先看一下单机调度问题: 假设有一台机器,以及在此机器上处理的n个作业a1,a2,...,an的集合。处理作业aj所需的时间为tj,作业aj的完成带来的收益为pj,作业aj完成的最后期限为dj。机器在一个时刻只能处理一个作业,而且如果某作业被处理...转载 2019-02-10 19:43:57 · 3178 阅读 · 0 评论