
DP
青春苦瓜
这个作者很懒,什么都没留下…
展开
-
1068 Find More Coins (30 分) 01背包求字典序最小路径
题意:用n个硬币买价值为m的东西,输出使用方案,使得正好几个硬币加起来价值为m。求字典序最小方案思路:一开始看着m只有100,暴搜结果T了一个1分的测试点。然后dp记节点+dfs跑字典序最小路径 结果T了个4分的测试点…太菜了啊 最后这题还是看了题解解释看注释#include<iostream>#include<algorithm>#include<st...原创 2019-11-12 21:12:11 · 174 阅读 · 0 评论 -
Hard problem CodeForces - 706C 字符串 dp
题意:给定n个字符串,让你求排成字典序的花费,这里不能交换任意两个字符串的位置,只能通过将两个字符串翻转来排序,每个字符串i的翻转代价是cost[i]这题和字符串没大有关系,就是个简单dp思路:考虑四种情况来转移就可以了,代码很清晰#include<iostream>#include<algorithm>#include<string.h>#in...原创 2019-10-03 20:01:10 · 178 阅读 · 0 评论 -
ZOJ 2972 分类讨论dp
题意:110米栏,运动员能够用三种状态跑,1状态耗体力f1且跑得快,2状态不消耗体力,3状态恢复体力f3但跑得慢。体力上限是M,且初始满体力,求跑完全程所用最短时间思路:d[i][j]表示 跑完第i个阶段,体力为j的情况下,用的最少时间 注意:j代表的时候跑完后的能量 即增完或减完或不变完分类讨论阶段i要按顺序遍历体力值j从0到m遍历对于三种模式:快速模式:前提是当前体力值j>...原创 2019-07-27 19:13:06 · 151 阅读 · 0 评论 -
LightOJ 1031 - Easy Game【区间dp】
题意:给一个序列,两个人轮流在序列的两边取任意个数的number,但每次只能从选定的那一边取连续的一个或一段,问取得数字的和的先手比后手多多少?思路: 区间dp,处理出来数列的前缀和,dp[i][j] 表示 区间 [i, j] 之间的数取完,两者取数和差值最大的值。枚举区间内点k,假设先手取[i, k] 或者 [k+1, j]取最大值,对剩下部分减去已经计算出的dp [k+1][j] 或者dp...原创 2019-07-23 15:24:13 · 125 阅读 · 0 评论 -
Basketball Exercise CodeForces - 1195C 线性dp
题意:给定两个序列a和b,可以选任意的数 但要满足以下规则:连续选择的两个数不能来自同一序列,选择了下标为i的 往后只能选下标比i大的求选的数和的最大值思路:dp[maxn][2][2] 第一维是长度 第二维是序列a还是序列b 第三维是选了还是没选枚举每个情况,具体看注释#include<iostream>#include<cstdio>#include...原创 2019-08-05 11:13:06 · 250 阅读 · 0 评论 -
2018焦作网络赛B Mathematical Curse dp
题意:有n个数和m个运算符,按顺序选m个数进行运算,初值为k,问最后能得到的最大值是多少。思路:dp[i][j]表示选到了第i个数时用了j个运算符,观察发现,一个数只能由他前一个状态的最大值或最小值转移过来(因为乘上一个负数会使最小的数变最大),所以我们同时维护最大最小。转移方程:dp[i][j]=max(dp[i−1][j−1]∘now[i],dp[i−1][j])(i<j)#in...原创 2019-08-03 15:06:50 · 173 阅读 · 0 评论 -
背包问题求方案数
求01背包,不一定要装满,那么就求出所有的情况来,遍历求出最大价值,然后把价值值等于价值值的方案数累加起来写法1:dp赋-inf(dp0=0) ,结果累加cnt;#include<iostream>#include<cstring>#define ll long long#define inf 0x3f3f3f3fusing namespace std;con...原创 2019-08-03 13:13:16 · 1237 阅读 · 0 评论 -
区间dp POJ 2955 括号匹配
题意:求能匹配的括号的个数思路:区间dp 模板题坑点:初值ans若为-1 碰到长度为1的括号串 输出的结果是-1而不是0#include<iostream>#include<algorithm>#include<string.h>#include<map>#include<queue>#include<cmath&...原创 2019-07-21 17:07:01 · 163 阅读 · 0 评论 -
HDU-2476 String painter(区间DP)
题意:给出两个串a和b,每次刷串a的某个区间(把该区间变成同一个字符),问最少几次能让a=b思路:对于本题,不妨先求出由空串变成a至少需要几次操作,再拿b去匹配。我们可以用dp[i][j]存储区间[i, j]最少需要的打印次数首先初始化dp[i][i]=1对于每个区间i~j 首先需要的打印次数为dp[i+1] [j]+1 。我们再枚举一个k为[i, j]的中间节点,将[i, j]分成...原创 2019-07-24 11:42:11 · 220 阅读 · 0 评论 -
POJ3260 The Fewest Coins 多重背包+完全背包
题意:有一个人去买t元的东西,有n种钱币,每种钱币的面额是v[i],个数是C[i],售货员每种钱币有无数多个。现在这个人想让交易的钱个数最少,即找回的和付出钱的张数,最少。买家:多重背包;售货员:完全背包;开两个数组,分别计算出买家,售货员每个面额的最少张数。然后最后计算出dp1[i]+dp2[i-t]的最小值来这里有一个地方:出钱的上界是什么看了别人的博客学到:出钱的上界不会超过最大面额...原创 2019-07-24 10:28:09 · 159 阅读 · 0 评论 -
POJ 2385 DP
题意:有两棵APP树,编号为1,2.每一秒,这两棵APP树中的其中一棵会掉一个APP.每一秒,你可以选择在当前APP树下接APP,或者迅速移动到另外一棵APP树下接APP(移动时间可以忽略不计),但由于却乏锻炼,你最多移动W次.问在T秒内,你最多能收集多少个APP.假设你开始站在1号APP树下.分析:dp[i][j]表示在第i分钟时,已经移动了j次后得到的苹果数量。状态转移方程:dp[i][j...原创 2019-05-20 14:21:05 · 119 阅读 · 0 评论 -
HDU 3033 分组背包
题意:伊瑟洛恩赚到了总值为m的奖学金,于是去鞋店买鞋。鞋店里有k种不同品牌的鞋子,共n双鞋子。每双鞋子都有它的价格b和在伊瑟洛恩心中的价值c以及它所属的品牌a。伊瑟洛恩希望每种品牌的鞋子都至少有一双,并且他不会买同一双鞋两遍。求伊瑟洛恩能得到的价值的最大值,如果他无法满足他的需求,则输出“Impossible”。思路:每个组至少一件,我们对每组进行01背包就行了.一开始把每个状态初值赋为-1.,...原创 2019-05-07 16:51:25 · 215 阅读 · 0 评论 -
区间dp 石子合并 切木条等 持续更新ing
石子合并(相邻) 切木条是互为逆过程 这里只写一种对于每堆石子,我们可以想到,此处是由2堆石子合并,所以最终最优解肯定是由两个局部最优解的加上整体的和求得。状态转移方程:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]); 表示从i到j的这段区间 是由合成这两个小区间的代价之和 加上合成大区间的代价 与dp[i][j]取最小。#incl...原创 2019-05-09 14:02:55 · 179 阅读 · 0 评论