![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝书dp
只努力的程序猿
临渊羡鱼,不如退而结网
展开
-
算法笔记上机指南———动规
最大连续子序列数据num(N)令d(i)表示num(i)最为末尾的连续序列的最大和。转移方程d(i)=max(d(i-1)+num(i),num(i))有一点需要注意,递归数组的最后未必是以num(N)最大最大核心代码 dp[0] = num[0]; for (int i = 1; i <N; i++) { if (dp[i - 1] + num[i] > num[i]) { dp[i] = dp[i - 1] + num[i]; //indx[i] = in原创 2020-07-01 18:43:14 · 176 阅读 · 0 评论 -
区间dp
Code vs 1154 能量项链在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠...原创 2019-08-12 12:19:02 · 89 阅读 · 0 评论 -
点集配对问题 蓝书dp
题目大意给定空间中的n个点把他们配对成n/2个点对,使得所有点对的距离之和最小;n<20分析应为n比较小,我们可以采取状压dp用二进制保存集合.设 d(s)为集合s配对后的最小距离 转移方程为:d(s)=min{d(s-i-j)+dist(i,j)|i,j属于S集合}核心代码为d[0] = 0;for (int i = 0; i < n; i++) for (i...原创 2019-09-21 22:26:09 · 194 阅读 · 0 评论 -
UVA 10817 headmaster's headache 校长的烦恼
题目大意每个学校有n个教师和m个求职者。已经知道每个的工资和能教的课程集合,要求支付最少的工资使得某门课都哦至少有两名教师教 m<20,s<8;分析当数据量小的时候首先考虑状压dp因为每门课程有至少有两名老师来教,因此用一个二进制集合难以满足要求,但是用三进制又是不可能的,因此我们需要两个值s1,s2来表示课程集合。状态就可以用三个量来表示了d(i,s1,s2) 表示前i...原创 2019-09-21 22:01:51 · 190 阅读 · 0 评论 -
UVA e 11795 洛克人的难题
题目大意洛克人有一个武器,它需要按照一定的顺序消灭n个其他的机器人,每消灭一个机器人将会得到他的武器,而且某些机器人只能用特定的武器才能将其消灭。统计出可以消灭所有机器人的顺序总数.分析由于题目中给定的n值很小可以采用状压Dp,用二进制的每一个位来表示每一个机器人我们可以构成一个集合q表示消灭i后,获得武器可以消灭的敌人q(i); for (int i = 0; i <=n; i...原创 2019-09-21 20:30:14 · 89 阅读 · 0 评论 -
UVA 10534wavio sequence 波浪子序列
题目大意:给定一个长度为n整数序列求一个最长子序列,长度为2k+1,要求前k个上升,后k个数下降分析对这样一个整数序列分别求最长上升序列和最长下降序列然后对同一点进行相加求最大;这个题目的重点时LIS问题参考刘汝佳的蓝书如何求LIS,最笨的方法,我们用d(i)表示从0-i个整数序列的最长上升序列用P数组保存序列状态转移方程为;d(i)=max{d(j)|1<j<i且p(j...原创 2019-09-21 16:17:42 · 178 阅读 · 0 评论 -
LA 4256 salesman 商人
题目大意给定一个包含n个点的无向连通图和一个长度为L的序列A,要求修改尽量少的数,使得序列中的任意两个相邻数或者相同,或者对应图中两个相邻节点.分析因为给定的节点N《100,所以我们把其纳入动态规划的状态当中去用一个邻接矩阵g表示两个点之间的联通关系,并且重要的一点,我们把自身与自身连通设为1,即g(i,i)=1;方便我们状态转移;我们设d(i,j)表示前i个数以第j个结尾的最小修改数,这...原创 2019-09-21 15:53:16 · 220 阅读 · 0 评论 -
UVA 11584 划分回文子串
题目大意一个小写字母组成的字符串,将它们划分为若干个回文串,谁求最少能划分为多少个回文子串分析首先就是打表,用一个mark数组表示 mark(i,j)表示i-j是否是一个回文子串然后用递推公式递推我们用d(i)表示从1-i的字符串可以划分为最少多少个回文串 ,初始化为:d(i)=d(i-1)+1状态转移方程为:d(i)=min{d(j-1)+1|i<j,mark(j,i)...原创 2019-09-21 15:33:50 · 145 阅读 · 0 评论 -
LA 4794 sharing chocolate 分享巧克力
题目大意给定一块长为x宽为y的矩形巧克力,每次操作可以沿着一条直线把一块巧克力切割成两块长宽均为整数的巧克力. 给定n个面积的巧克力试求能不能切成.n<15分析注意到n的规模很小。可以把n有关的子集作为动态规划的一部分. 设f(r,c,s)表示r行c列的巧克力是否可以切割成面积为S集合。对于一块面积为(r0c0)的巧克力,状态转移为:存在1<=r0<r和s中的集合s0...原创 2019-09-21 15:18:01 · 190 阅读 · 0 评论 -
LA 3983 robotruck 捡垃圾的机器人
题目大意在一个平面上有n个垃圾,坐标为(Xi,Yi),重量为Wi.有一个机器人,要求按照编号从小至大的顺序捡起垃圾放入垃圾桶(位于原点(0,0)),机器人可以捡起几个垃圾一起扔掉,但是任何时候的垃圾重量不能超过C,机器人的行走轨迹是哈密顿距离即横坐标之差的绝对值加上纵坐标之差的绝对值。分析设d[i]为清理完前i个垃圾后回到原点所走的距离;d[i]=min{d[j]+dist(j+1,i),d...原创 2019-09-21 11:48:41 · 559 阅读 · 0 评论 -
UVA10859 placin glampposts(放置街灯)
题目大意给定一个有n个节点的无向无环图,在尽量少的节点上放灯,使得所有的被照亮,每盏灯可以照亮以他为一个端点的所有边,在灯的总数最小的前提下,被两盏灯照亮的边应该尽量大;分析注意题意,给定的是无向无环图,即“森林”,有多棵树组成,经典的树上的动态规划此题目要求的优化量有两个,一个是a尽量小,a为灯的总数,另一个是b尽量小,b为被两盏灯照亮的边为了统一起见我们把b尽量大替换为尽量小,c是被...原创 2019-09-21 10:41:22 · 106 阅读 · 0 评论 -
## **算法竞赛入门经典-训练指南**
dp动态规划; **嵌套矩形**题目大意:有n个矩形,每个矩形可以用两个整数a,b表示长和宽,一个矩形X(a,b)可以去嵌套另一个矩形Y(c,d)的条件是:a<c及b<d 或者a<d&&b<c;在这些矩形当中选出最多的矩形,排序之后前面的可以嵌套后面的;本文是经典的DAG最长路问题,设d(i)为以...原创 2019-09-20 19:08:05 · 133 阅读 · 0 评论 -
hacker's Crackdown UVA 11825
题目大意;有n台计算机(从0开始编号至n-1的网络.一共运行着n中服务,对于每一台计算机,你可以选择终止一项服务,这样就会终止与这台计算机所有相邻的计算机的这项服务,对于一项服务来说,如果没有一台计算机运行,就判定提供这项服务瘫痪, 试着求出瘫痪的最大服务的数量分析本题的数学模型是:把n个集合分成尽量多的组,使得每组中的所有集合的并集等于全集,这里的计算机p就是计算机i 与相邻计算机的一个集...原创 2019-09-21 10:02:10 · 93 阅读 · 0 评论 -
Game of Sum UVA10891转自刘汝佳蓝书
题目大意;给定一个连续的序列,A和B进行博弈,两个人轮流取数,A先取数,每次只能从序列的右端或者左端取一个数,不可以两端都取。所有数字被取完后游戏结束,统计每个人取走的所有数之和作为各自的得分.两人采取的策略都是让自己的得分尽量高,并且两人都十分聪明。分析博弈问题这个题百思不得其解,尤其是关于状态转移的,不是规定取一个数为什么会会有那么多状态,先记下,回头在看看.整数的总和是一定的,所以...原创 2019-09-21 09:24:53 · 178 阅读 · 0 评论