动态规划
beckyUp
他强任他强,过题我在行
展开
-
codeforces 234F Fence[dp]
题目分析dp[i][j][0] 表示 前i个物品中有 j 个红色的 且第i个物品是 绿色的最小价值dp[i][j][1] 表示 前i个物品中有 j 个红色的 且第i个物品是 红色的最小价值dp[i][j][0]=min(dp[i−1][j][0],dp[i−1][j][1]+min(h[i−1],h[i]))dp[i][j][0] = min( dp[i-1][j][0],dp[i-1][j...原创 2019-11-05 14:37:42 · 186 阅读 · 0 评论 -
字符串的扩展距离问题
题目描述:对于长度相同的2个字符串A和B,其距离定义为相应位置字符距离之和。2个非空格字符的距离是它们的ASCII码之差的绝对值;空格与空格的距离为0,空格与其他字符的距离为一个定值k。在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串A和B的所有长度相同的扩展中,有一对距离最短的扩展,该距离称为字符串A和B的扩展距离。对于给定的字符串A和B...原创 2018-04-18 19:54:24 · 5479 阅读 · 4 评论 -
ccpc wannafly 秦皇岛E kingdom【树形dp】【已修正】
这个题目是一个树形dp ,我们记F[i] 为 总数为i的时候的结果, g[i][j] 表示的 总数为i ,心腹的子树结点为j的情况 所以,根据背包 g[i][j] = max(g[i][j-1],g[i-j][j]+f[j]) 第一种情况就是多出的一个结点接在左边,那么这个节点作为心腹的话,就不会有贡献,另一种情况就是把结点接在右边,那么左边j个结点作为心腹的话,最多为f[j] 然后其余的...原创 2018-08-21 15:48:33 · 460 阅读 · 0 评论 -
hdu 2089 不要62[数位dp入门]
又一次开始搞数位dp了,一直在拖,希望这次能够彻底学会#include <bits/stdc++.h>using namespace std;typedef long long ll;int a[20];ll dp[20][2];//不同的题目状态不同ll dfs(int pos,int pre,int sta,bool limit){ if(pos==-1)...原创 2018-08-21 22:55:12 · 182 阅读 · 0 评论 -
uva 10306 e-coins【dp】
二维完全背包#include <bits/stdc++.h>#define cl(a) memset(a,0,sizeof(a))#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=b;i>=a;i--)#define sc(x) scanf("%d",&x)#defi...原创 2019-02-26 22:43:56 · 144 阅读 · 0 评论 -
最优排序二叉树问题OBST【区间dp+四边形不等式优化】
题目大意给定n个点的权值,要求构建一棵二叉搜索树,使得他满足 ,权值乘以深度的和最小题目分析这个题目,我们通过BST的构建,由于BST 的性质可知,根节点的左边一定小于根,右边一定大于根,所以先对所有数据排序,然后枚举根节点。根节点对于答案的贡献 fk*1,由于第k个结点作为根节点了,因此对于其他结点来说,他们的深度都增加了一个,所以,他们都对答案的贡献增加 fi而根节点将所有数据分成两部...原创 2019-04-01 21:49:48 · 920 阅读 · 0 评论 -
约瑟夫环变形问题LA 3882
约瑟夫环不再赘述对于约瑟夫环变形问题 当问题规模变大,我们只考虑最后被删除的那个人假设从0开始报数他在最后一次,只剩自己的时候,报数为0 记 dp[1]=0;倒数第二次,还剩下两个人 ,所以 这个人这一轮的序号应该是 (dp[1]+k)%2倒数第三轮 此人序号应为 dp[3] = (dp[2] +k)%3因此可以得出递推关系 dp[i] = (dp[i-1]+k)%idp[n]...原创 2019-04-08 23:31:29 · 490 阅读 · 0 评论 -
黑客的攻击 uva 11825【dp+枚举】
蓝书经典例题题目大意将一堆集合分组,使得每个组的并集等于全集,问最多有个多少个这样的集合题目分析n很小,所以用二进制来存储集合cover[s] 记录 s中所包含的几个集合的并集f[s] 记录能划分成的集合个数f[s]=max{f[s-s0] s0 是s的子集,且cover[s0] == 全集} +1这里有一个枚举子集的骚操作 for(int i=1;i<(1<...原创 2019-04-09 22:09:17 · 203 阅读 · 0 评论 -
2018 icpc Beijing Regional H 【dp+ac自动机】
题目大意给定一个串,长度为m, 询问存在多少长度为n的串,使得与长度m的串对应位置匹配最多只有一个字符不相同的方案数题目分析如果我们考虑串进行匹配的化,很难去重因此我们反过来考虑考虑匹配不上的情况那么要匹配的串只有m+1个,所以我们只要考虑当前串的一个后缀是否是m+1个串的前缀即可。然后通过后缀进行转移f[i][j] 表示 前i项的后缀为状态j的时候的方案数那么对于第i+1项,...原创 2019-09-19 11:30:53 · 269 阅读 · 0 评论 -
hdu 1284 钱币兑换【完全背包问题】
题目大意,给你1分、2分、3分的硬币,问你组成n分的钱有多少种兑换方法这个题就是一个不带价值的完全背包问题,由于和完全背包问题的模型还是有一点差距,那么我们来讲讲如何把它作为一个完全背包问题来分析。首先这个题, 1,2,3分的硬币数量是无限的,那么对于 总量为j的硬币来说,他可以取k1个1分的,k2个2分的和k3个3分的,这就具备了完全背包的基本雏形,我们很容易想到,如果只有1分的,显然只有一...原创 2018-03-27 19:38:24 · 240 阅读 · 0 评论 -
埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛L
K序列 链接:https://www.nowcoder.com/acm/contest/91/L 来源:牛客网题目描述 给一个数组 a,长度为 n,若某个子序列中的和为 K 的倍数,那么这个序列被称为“K 序列”。现在要你 对数组 a 求出最长的子序列的长度,满足这个序列是 K 序列。 输入描述: 第一行为两个整数 n, K, 以空格分隔,第二行为 n 个整数,表示 a[1] ∼...原创 2018-04-15 17:18:46 · 282 阅读 · 0 评论 -
51nod 1277 B - 字符串中的最大值 【KMP+dp】
题目描述:给你一个1e5长度的字符串,问每个字符串在其中出现的次数,求次数乘以长度的最大 分析:这个题一开始就想着要统计每个前缀出现的次数是比较麻烦的,因为字符串的长度太长,时间复杂度远远不够,但是仔细观察,由于都是前缀,所以,我们可以发现,前缀的前缀一定在前缀中重复出现,这句话可能不好理解,举个例子, abababc 他的一个前缀ababab中的前缀为ab 那么我们就可以知道 num[ab]+...原创 2018-03-27 08:57:38 · 298 阅读 · 1 评论 -
codeforces 812b Sagheer, the Hausmeister
题目大意: 从左下角开始出发,把每一行的灯都关闭了,最左和最右是楼梯,向上只能通过楼梯,并且每一层都关完才能上一层,上楼和走过房间的时间都是一分钟,问最短时间这道题就是一个线性的DP 考虑从左和从右两种情况就好了一开始的时候看错题目了,把note 看成是限制条件,就做错了 另外一个就是需要仔细考虑全零行的情况#include <bits/stdc++.h>#define inf 0x3f3f3f原创 2017-06-21 21:49:47 · 300 阅读 · 0 评论 -
连续最大子列和的动态规划写法
连续最大子列和的动态规划写法 题目: 给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在原创 2017-03-01 12:09:57 · 362 阅读 · 0 评论 -
暴力算法瑰丽版——动态规划
今天讲的算法是动态规划,所谓动态规划就是讲需要重复出现的问题的答案记录下来,或者是前面的子问题对后面的问题有帮助的,把子问题的答案记录下来,这样就可以减少重复的计算,以此来降低时间复杂度,一般适用于有最优子结构和重叠子问题的情况比如说,我们求最长上升子序列的问题:一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们原创 2017-02-27 00:21:54 · 419 阅读 · 0 评论 -
An impassioned circulation of affection(codefoces 814c)
题目大意 :给你一串字符,修改其中M个为字符C 输出c最长的个数这个题首先按照字符串,进行预处理,在某段内某字符的个数,因此就能知道在该段内修改m个输出的最多字符个数 最后记得进行dp 如果修改更少的情况能够有更长的字串,就直接加上去#include <bits/stdc++.h>using namespace std;typedef long long ll;int dp[30][2000原创 2017-06-13 21:06:38 · 268 阅读 · 0 评论 -
lightoj 1030 - Discovering Gold[期望]
题目大意: 起始位置是1,从1走到n,给你一个骰子(6个面),按点数走,收集每一点上的金子,如果你将要走到的位置在n之内,就继续扔,往前走,如果在n之外,就一直扔到合适的位置为止,求到达n点时的期望 分析: 这个题是一个求期望的题,那么值得注意的是,当扔在n之外的情况是无效的,所以我们在位置i#include <bits/stdc++.h>using namespace std;i原创 2017-10-16 11:24:24 · 425 阅读 · 0 评论 -
ZOJ - 3747 Attack on Titans [有条件限制的经典递推计数好题]
题目大意是 有n个士兵的排列,士兵有GRP三种类型,要求至少有m个G士兵连续,至多有k个R士兵连续,问有多少种方案,答案 取模1e9+7题目分析 我们看到这个题目,很显然是一个计数的问题,那么如果从简单入手考虑,假设不存在上述条件,就是有n个士兵,每个士兵有三种类型,很显然就是3n3n3^n种情况,然后现在我们加上假设条件,根据尝试,我们发现至多有K个R士兵连续这种情况比较容易考虑,这是我们...原创 2018-02-27 11:20:13 · 256 阅读 · 0 评论 -
51nod 1183 编辑距离问题
2个字符串,把s1转换到s2最少操作,并且把这个操作过程输出。操作包括3种:删除一个字符,增加一个字符,改变一个字符,操作仅对s1执行,使其等于s2.分析这个题很想最大公共子序列问题 对于两个字符串,如果 a[i]=b[j] 则不必进行操作 如果a[i]!=b[j] 那么有三种情况, 删除 ,增加 改变 dp[i][j]=min(min(dp[i-1][j],dp[i][j-1])...原创 2018-03-26 23:52:05 · 168 阅读 · 0 评论 -
数字三角形问题 【简单树形dp】
给定一个由n行数字组成的数字三角形,设计一个算法,计算出从三角形的顶至底的一条路径,是的经过该路径经过数字最大 经典的树形dp,状态转移方程如下 dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j];#include <bits/stdc++.h>#define cl(a) memset(a,0,sizeof(a))using name...原创 2018-03-27 08:23:07 · 261 阅读 · 0 评论 -
浙大校赛- Course Selection System
There are n courses in the course selection system of Marjar University. The i-th course is described by two values: happiness Hi and credit Ci. If a student selects m courses x1, x2, …, xm, then his c原创 2017-05-10 22:10:01 · 513 阅读 · 0 评论