ACM_动态规划
文章平均质量分 91
PoemK
这个作者很懒,什么都没留下…
展开
-
ZOJ 3802 Easy 2048 Again 状态压缩dp
题目Easy 2048 Again —–zoj 3802Time Limit: 2 Seconds Memory Limit: 65536 KB Dark_sun knows that on a single-track road (which means once he passed this area, he cannot come back again), there are so原创 2017-07-28 13:58:13 · 515 阅读 · 2 评论 -
poj 3286 How many 0's? 数位dp
题意:输入m,n(m<=n),求[m,n]间数字0出现的次数。原创 2016-11-23 20:44:46 · 320 阅读 · 0 评论 -
bzoj 1833 count 数字计数 数位dp
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。30%的数据中,a<=b<=10^6;100%的数据中,a<=b<=10^12。原创 2016-11-22 16:42:02 · 401 阅读 · 0 评论 -
bzoj 1026: [SCOI2009]windy数 数位dp
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?原创 2016-11-21 18:54:39 · 307 阅读 · 0 评论 -
hdu 4507 吉哥系列故事——恨7不成妻 数位dp 求平方和
请计算[L,R]中和7无关的数字的平方和,并将结果对10^9 + 7 求模后输出。什么样的数和7有关呢? 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关—— 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 现在问题来了:吉哥想知道在一定区间内和7无关的数字的平方和。原创 2016-11-20 09:45:17 · 498 阅读 · 0 评论 -
bzoj 1799 self 同类分布 数位dp
给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数。原创 2016-11-18 19:47:53 · 378 阅读 · 0 评论 -
hdu 3709 Balanced Number 数位dp
题意:问区间[x,y]内,有多少个平衡数。一个数是平衡数,即存在一个支点pvt,使得 sum(bit[i]*(pvt-i) )=0;(x,y属于long long)原创 2016-11-17 12:22:25 · 347 阅读 · 0 评论 -
POJ 3252 Round Numbers 数位dp
题意:给出区间[a,b],求其中二进制表示时0的数量>=1的数量的数个数(不能算前导零)。原创 2016-11-16 14:14:17 · 351 阅读 · 0 评论 -
hdu 4734 F(x) 数位dp
题意:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出A,B求区间[0,B]内满足f(i)<=f(A)的i的个数。原创 2016-11-15 20:00:28 · 357 阅读 · 0 评论 -
hdu 5955 Guessing the Dice Roll 概率DP,ac自动机,高斯消元 ★★
掷骰子,n个人,每人预测一个长度为L的序列,直至筛子序列的最后L个数与某个人预测的一致为止游戏结束(每个人预测的序列不一样,且长度均为L)。原创 2016-11-09 20:49:45 · 2544 阅读 · 0 评论 -
hdu 5469 Antonidas 树形dp+暴力 ★
题意:给出一棵树,每个结点对应一个字符。现在给出一个字符串。问树上有无某两点的最短路能匹配该字符串。原创 2016-10-19 15:39:47 · 624 阅读 · 0 评论 -
poj 1160 Post Office 四边形优化
Post OfficeTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 18793 Accepted: 10137DescriptionThere is a straight highway with villages alongside the hig原创 2016-10-08 00:41:24 · 330 阅读 · 0 评论 -
hdu 3516 Tree Construction 四边形不等式优化
题目链接题意:二维坐标上,给出n个点,x严格单增,y严格单减。要求将这些点构成一棵树,其中边的方向只能是x轴正向和y轴正向。问树中所有边的长度之和最短为多少。分析:因为规定了变得方向,所以根节点坐标应该不在第一个点右边,也应该不在最后一个点上面。容易感觉到根节点一定就在(a[1].x,a[n].y)处。 dp[le][ri]=min{dp[le][k]+dp[k+1][ri]+a[k+1].x-a原创 2016-10-07 16:09:07 · 974 阅读 · 0 评论 -
hdu 2829 Lawrence 斜率优化dp
题目链接题意:序列划分n个数,分成m+1组(每组的数位置连续),每组的分值为其中两两数之积,求分值和最小值。(1≤n≤1000)解法:关键点:score[le+1][ri]=score[1][ri]-score[1][le]-sum[le+1][ri]*sum[1][le]; 用这个可变形成斜率式。代码:#include<cstdio>#include<string>#include<cst原创 2016-10-02 23:21:28 · 301 阅读 · 0 评论 -
hdu 3480 Division 斜率优化dp
题意:给出n个数,分为m组,求min{∑(Max−Min)2}min\{\sum (Max-Min)^2 \} N (≤ 10,000) and M (≤ 5,000)解法:序列划分+斜率优化代码:原创 2016-10-02 21:39:01 · 318 阅读 · 0 评论 -
hdu 3045 Picnic Cows 斜率优化dp
Picnic CowsTime Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2594 Accepted Submission(s): 821Problem DescriptionIt’s summer voc原创 2016-10-02 17:28:52 · 410 阅读 · 0 评论 -
hdu 5074 Hatsune Miku 简单dp
题意:给出m*m的分值表和一个序列(其中有些位置待填),求总分值的最大值。总分值=序列中相邻元素的分值之和。解法:dp[i][x]表示考虑了前i个序列且最后一个为x的最优值。代码:#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#inc原创 2016-09-29 14:22:56 · 368 阅读 · 0 评论 -
CF 518 D. Ilya and Escalator 概率dp
链接题意:有n个人,每秒有p的概率有一个人进电梯,问t秒后电梯里的人数的期望。###解法: 因为有人数上限,所以要使用二维记录当前时间和人数。之后根据概率进行状态转移。注意每个阶段概率和为1,编程上更新后继状态更简单。#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#in原创 2016-09-29 13:32:10 · 427 阅读 · 0 评论 -
CF 567C. Geometric Progression
题目链接题意:给出一个序列,求公比为k,且长度为3的子等比序列个数。(1 ≤ n, k ≤ 2e5)( - 1e9 ≤ ai ≤ 1e9) #解法: dp[0][x]表示当前x的数量。 dp[1][x]表示当前以值x结尾,长度为2且公比为K的等比数列数量。代码:#include<cstring>#include<iostream>#include<map>using namespace原创 2016-09-24 09:59:43 · 536 阅读 · 0 评论 -
hdu 4118 Holiday's Accommodation 思维+树形dp
题目链接题意:给出一棵树(n<=1e5),边具有权值。现在每个城市中有一个人出发去另一座城市,不同人的目的不能相同。问路径和的最大值。解法:如果直接从子结构和问题上着手不好考虑。但是多分析机组数据会发现:对于任意一条边,将n个点划分为n1、n2两部分。为了使路径和尽可能大,那么两部分尽可能进行更多的交换,那么令m=min(n1,n2),这条边会经过2*m次。代码:#include<cstdio>#原创 2016-09-23 23:18:52 · 398 阅读 · 0 评论 -
CF 559C. Gerald and Giant Chess 组合数学+DP
题目链接题意:给出一个h*w的棋盘(h,w<=1e5),其中有n个位置不能走(n<=2000),现在要从左上角走到右下角,每步只能向下或者向右走一步。问有多少种走法?右下角保证可以走到。解法:对于右走x步,下走y步的无限制方案数是C(x+y,y),可以记为C(x,y)。 首先将最右下角也作为一个不能走的位置,最后要求出到达这个位置的合法路径数dp[n]。 对所有不能走的位置排序,先比较行,再原创 2016-09-22 10:02:25 · 750 阅读 · 0 评论 -
hdu 5117 Fluorescent 数学展开式+dp
题目题意:给出一些个开关(m<=50),每个开关控制一些灯(一共有n个灯<=50),一旦按了开关,它所控制的灯都会切换一次状态,最开始所有灯都是灭的。现在每个开关最多按一次,求2m2^m种情况下的E[x3]E[x^3],x为点亮的灯数。解:求E[x3]E[x^3],其中x=x1+x2+x3x=x1+x2+x3, 则x3=(x1+x2+x3+...+xn)∗(x1+x2+x3+...+xn)∗(x1原创 2016-09-21 16:33:30 · 456 阅读 · 0 评论 -
CF 173C. Spiral Maximum 预处理
C. Spiral Maximumtime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputLet's consider a k × k square, divided in原创 2016-09-20 17:07:49 · 321 阅读 · 0 评论 -
hdu 5900 QSC and Master 区间dp
题目题意:给出n(n<=300)个pair:<key,value><key,value> 如果相邻两个pair的key不互素,那么可以将这两个pair拿取,得分加上两个value。 问最大得分。解:很显然就是区间dp,一开始我认为就是枚举一个区间中最后拿去的两个相邻pair就完了,wa一发后,发现不对: 最后拿去的两个pair不一定相邻,所以如果[le,ri]中le和k配对,那么[le,k]原创 2016-09-18 20:22:15 · 517 阅读 · 0 评论 -
hdu 5886 Tower Defence 树形期望dp 雪漫防守战
题意:风暴斗篷现在要攻打雪漫城。雪漫城有n(n≤100000)个哨塔防守,哨塔之间有n-1条路相连,(构成一棵树)。现在预测到风暴斗篷要进攻某一条路,然后这棵树就一分为二,现在要得到分开后的最长路。 图留斯将军假定进攻所有路的概率相等,问最长路的期望*(n-1)。 分析:这就是一个树形dp,和期望没什么关系。求的就是n-1种划分后的最长路之和。对于一个结点x,无非要求两个东西,以它作为根的子树中的原创 2016-09-17 21:22:38 · 984 阅读 · 0 评论 -
hdu 5890 Eighty seven 背包bitset
题意:给出n(n<=50)个数,然后有Q(Q<=1e5)个查询,每次查询相互独立,内容是:抽走1到3个数,然后问剩下的数中,能否有10个数凑成87。解法:学别人写的bitset去优化背包,原来还STL还有bitset这个东西。 比赛的时候想优化结果想错了,比赛的时候认为就是先进行背包,然后 等价于求dp[87+sumV][10+cnt] 反例是 4 4 3 6 ,4+4+3=11,原创 2016-09-17 21:12:22 · 593 阅读 · 0 评论 -
hdu 1496 QQpet exploratory park 水概率dp
题目犯了个语言的错误: C语言中”%%”会输出一个”%” ,我在本地用1个”%”还是输出了”%”。代码:#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#原创 2016-09-10 23:44:15 · 426 阅读 · 0 评论 -
CF 708C. Centroids 树形dp
题目题意:给出一棵树(n<=4e5),可以有一次机会:删除一条边,然后添加一条边,使之仍然是树。 现在对于每个点,最多有一次机会,是否可以保证与它相连的子树大小不超过n/2。(删掉这个点后,所有连通分量的结点数<=n/2)解法:1.删去任一结点x,最多只会有一棵树的size>=n/2 2.对于这棵树的补救措施就是将其中一部分移到别处。 3.只能是一部分,因为全部移到别处更加不能满足要求。 4原创 2016-09-08 12:20:22 · 867 阅读 · 0 评论 -
CF 533 B. Work Group 树形dp
题目链接题意:给出一棵树(n<=2e5),每个点有权值,要求选出权值和尽可能大的点集,使每个点都能有偶数个后代结点被选进去(可以为0)。对于结点x,先处理子结点y1…yn初始化 dp[x][0]=0,dp[x][1]=-inf;dp[x][1]=max{ dp[x][0]+dp[yi][1],dp[x][1]+dp[yi][0] }; dp[x][0]=max{ dp[x][1]+原创 2016-09-07 18:03:04 · 421 阅读 · 0 评论 -
CF 540D. Bad Luck Island 概率dp
题目链接题意:一座岛上有三个物种,石头,剪刀和布,数量分别是R,S,R(均小于等于100),每天会有两个生物相遇,如果相克,会死掉一个生物。 问最后只剩下某个物种的概率是多少?分别输出只剩下石头、剪刀和布的三个值。对于dp[r][s][p],无非两种情况,一是两个生物,相互克制,转移到子状态。否则,转移到自己。两种情况的概率比较好计算。比如说Rock与scissors相遇的概率为 r*s/C(r原创 2016-09-07 13:10:14 · 439 阅读 · 0 评论 -
POJ 3156 Interconnect 并查集+期望dp
题意:有n个城市,m条边。现在每一年随机选两个不同的城市,然后建一条边。问多少年后所有城市连通?输出期望值。解:先用并查集处理出有多少个连通块。 状态的表示是每个连通块中点的数目。 如果某一年选的两个点属于同一连通块,就是转移到了自己。 否则就是转移到了另一个状态。移项解方程即可。 就是状态表示用了哈希表,略微复杂点。#include<cstdio>#include<string>原创 2016-09-05 12:40:14 · 428 阅读 · 0 评论 -
poj 3028 Shoot-out 概率dp ★★
题意:n个枪手站在一起,轮流射击,每次只能射一发,且只能射自己以外的人,命中即死。每个人每次射击都有一个命中率。游戏到剩下最后一个人存活结束。每个人每次射击会用最优决策(决策后,自己存活率最高),如果有多个最优决策,随机。问n(n<=13)个人存活的概率。:状态的表示是[i][S][j]表示当前存活的状态S,i表示当前该谁射击,j表示此时j的胜率。状态转移存在环,[i][S]这个状态可能多次转移回到原创 2016-09-05 12:33:50 · 704 阅读 · 0 评论 -
uva 10529 Dumb Bones 区间期望dp ★★
题意:现在要铺设多米诺骨牌,放置一次左倒的概率是PL,右倒的概率是PR,他们的和不超过0.5。现在用最优的铺设方法,问铺好n(n<=1000)张牌放置次数的期望。原创 2016-08-29 23:35:36 · 667 阅读 · 0 评论 -
CodeForces 314B. Sereja and Periods 思维+简单dp
题目题意:给出不超过100长度的两个字符串a、c,以及两个正整数b、d(b,d<=1e7),求最大的q使得ab能找到子串(字符不一定相邻)(bd)qa^b能找到子串(字符不一定相邻) (b^d)^q这个题我的思考角度不大好,唉… 令dp[x]表示c串的第x字符开始匹配,匹配完一个字符串a后,能够匹配多少个整字符串c,并且nex[x]代表下次开始匹配的位置。状态选取的好…之前一直想的是匹配完一个字符原创 2016-08-29 12:54:25 · 973 阅读 · 0 评论 -
poj 3763 Tour in Wonder Land 树形dp ★★
题目题意: 给出一棵树(n<=1e5),求最少添加多少条边,使得能得到一条遍历所有点的哈密顿路径。(原题说是从点1出发,遍历每个点一遍,并且回到点1)这个题目又给我上了一课… 训练赛的时候想了2个小时,最后放弃了… 感觉自己想到了其中一部分,还差一部分。 首先这个题目要考虑的是一个环,容易想到先考虑链,最后加1。这个基本想到了。 之后基于链考虑就有两种状态,一种是从根结点出发,一种是非根结原创 2016-08-29 00:26:09 · 531 阅读 · 0 评论 -
CF 294E - Shaass the Great 树形dp
题目题意:给出一棵树(n<=5000n<=5000 ),n-1条边有权值,先要拆掉一条边,然后补上一条边,使得仍然是树,求所有两点对距离和的最小值。解:可能这题难度并不大,不过我做这题并不大顺利 由于看到n的数量级,复杂度不能超过O(n2)O(n^2),一开始想不到这什么巧妙算法,后来想到可以枚举边,如果枚举拆掉边+补上的边,时间复杂度已经远超O(n^2),后来一度想不出来。 最后发现,拆掉一原创 2016-08-27 22:28:58 · 848 阅读 · 0 评论 -
hdu 4285 circuits 插头dp
题目链接题意:要求在在给定的n*m(2<=n,m<=122<=n,m<=12)区域内形成恰好k个回 路。使得所有格子均被遍历,(一个格子只能被一个回路遍 历)。并且不能出现一个回路包住另一个回路的情况。问方法总 数。解法:要求K个,并不是问题,只要在状态中加入一位存储回路数目即可。 12*12/4=36,以8进制来看,大约要留2个8进制位,就是6个二进制位。然后就是保证不出现环套环的情况:在回原创 2016-08-23 19:23:01 · 289 阅读 · 0 评论 -
poj 1739 Tony's Tour 插头dp
题目链接题意:障碍格子不能走,非障碍格子必须遍历, 要求从左下角走到右下角,问方案数。解:1.添加两行,转化为求回路:.####. … … #include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>us原创 2016-08-23 08:13:48 · 455 阅读 · 0 评论 -
hdu 1964 插头dp
题目链接每个格子间的墙之间都有花费。要使一条回路遍历所有格子,并且总花费最小。#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x)原创 2016-08-22 20:46:41 · 433 阅读 · 0 评论 -
hdu 3377 Plan 插头dp
题目链接题意:每个格子都有权值, 从(1,1)走到(n,m),每个格子不能重复访问,问最大得分。解:不能用2进制,用最小表示法加以判断防止出现多个回路。#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>原创 2016-08-22 18:54:06 · 467 阅读 · 0 评论