动态规划
Jerry99s
OI -> ACM -> AI
展开
-
HDU 3247. Resource Archiver (AC自动机+bfs+DP)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=3247题意:给定n个串,将他们放在一个串s中,可以重叠;给定m个串,要求s中不能出现这m个串;问s最小多长。分析:两篇很好的题解:https://blog.csdn.net/woshi250hua/article/details/8021283https://www.cnblogs.com...原创 2019-08-15 11:05:19 · 535 阅读 · 0 评论 -
CF#450 D.Unusual Sequences
题目:http://codeforces.com/contest/900/problem/D 题意: 给两个数X,Y,求有多少种可能,使得一串数a1,a2…ak, 有gcd(a1,a2…ak)= X且sum(ai)=Y 其中k任意 分析: 由题意知,Y%X!=0时,无解; Y%X==0时,令n=Y/X; 则问题转化为: 求有多少种可能,使得一串数a1,a2…ak, 有①gcd(原创 2017-12-14 16:54:34 · 236 阅读 · 0 评论 -
Codevs3269 混合背包
题目:http://codevs.cn/problem/3269/ 分析:一道混合背包的题目 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=200005;long long int f[Tmax],n,m;void zeroonepack(lon原创 2017-10-01 11:09:47 · 202 阅读 · 0 评论 -
Codevs2185 最长公共上升子序列
题目:http://codevs.cn/problem/2185/分析:f[i][j] 表示:a[1]...a[i]和b[1]...b[j]中以b[j]结尾的(并不一定以a[i]结尾,i只是阶段) 则转移为: f[i][j]=max(f[i-1][j'])+1 (a[i]==b[j],j'<j,b[j']<a[i]==b[j]) =f原创 2017-10-01 10:01:32 · 223 阅读 · 0 评论 -
Codevs5429 多重背包
题目:http://codevs.cn/problem/5429/ 分析:多重背包题目 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=7005;long long int n,m,f[Tmax];void completepack(long lo原创 2017-10-01 10:56:21 · 271 阅读 · 0 评论 -
Codeforces Round439 C.The Intriguing Obsession
题目: 有三种颜色的点,每种各有a,b,c个,任意两点之间可以连线,但要求同种颜色的点距离不得小于3(一条线代表距离为1),求合法的连线方案数 分析: 哇,一开始以为这是个容斥,想了半天没思路 赛后一看,是个DP。。 1。首先同种颜色的点不能直接连,否则距离是1 2。然后同时观察两种颜色的点,比如红黄,每一个黄点至多连接1个红点,否则红点距离为2 3。也就是说,红黄之间的连线方案其实是原创 2017-10-07 09:34:08 · 605 阅读 · 0 评论 -
HDU5534 Partial Tree
题目: 给n个点,给定度为i的点有一个权值w[i],问如何组成一棵树(n-1条边),使得权值和最小 分析: 总共有2(n-1)个度,先给每一个点分配一个度(保证每个点有1个度),剩余n-2个度,还是分配给这n个点。 问题转化为:空间为n-2的一个背包,如何分配给n个物品,使得价值最大 问题再转化为:每个物品可以取0,1,2,3…..n-2个(对应每个点有多少度),即每个物品可取无限件,在一原创 2017-10-06 17:42:01 · 209 阅读 · 0 评论 -
洛谷2633 王后万岁
题目:http://www.luogu.org/problem/show?pid=2633 分析:DP 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <vector>using namespace std;const int Tmax=16005;int n,data[Tmax],ans=-214原创 2015-11-01 14:39:20 · 976 阅读 · 0 评论 -
HDU3001 Travelling
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3001 分析:状压DP,需要用三进制。注意空间限制,如果用两个二进制压缩会超空间,而且会有无用状态,但3进制状态正好,不超空间。这题常数卡的非常厉害,注意初始化啥的都放在work函数外. 代码:#include <cstdio>#include <algorithm>#include <cstring原创 2015-11-03 09:57:52 · 363 阅读 · 0 评论 -
洛谷2629 好消息,坏消息
题目:http://www.luogu.org/problem/show?pid=2629# 分析:。。。 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=1000005;int n,a[Tmax],suml[Tmax],sumr[Tmax],fl[原创 2015-11-01 21:54:01 · 537 阅读 · 0 评论 -
洛谷2654 原核生物培养
题目:http://www.luogu.org/problem/show?pid=2654# 分析:优先队列+DP. 代码:#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>using namespace std;const int Tmax=30,inf=0原创 2015-11-01 21:49:47 · 1143 阅读 · 0 评论 -
Codeforces 908D New Year and Arbitrary Arrangement
题目: http://codeforces.com/problemset/problem/908/D题意:给定字符’a’出现的概率pa/(pa+pb),’b’出现的概率pb/(pa+pb); 给定一个正整数k,构造一个字符串,当出现至少k个子序列”ab”时停止构造; 问子序列”ab”出现次数的期望P/Q,输出P*(Q的逆元); 注意是子序列不是子串ab。分析:这个题特别难想! 一个 (dp原创 2018-01-01 22:00:15 · 667 阅读 · 2 评论 -
CF#445 C. Python Indentation
题目:http://codeforces.com/contest/909/problem/C 题意:给一系列循环(for)和基本语句(simple),求通过for的不同嵌套,能组成多少种不同的程序。 分析: 逆推DP; f[i][j] 表示:第i-n个字符组成的程序,且有j个独立语句的方案数; 其中独立语句意思是:未被for包含的s语句 或者 未被其他for包含的f语句; 用sum数组记原创 2017-12-28 15:42:00 · 419 阅读 · 0 评论 -
HDU 2457. DNA repair (AC自动机+DP)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2457题意:给n个患病DNA串;给1个DNA串,问最少修改几个(只能用字符AGCT)能使得所有患病DNA串未出现过。分析:AC自动机上做动态规划。就像在Trie上走,去构造一个串;设f[i][j]表示长度为i,Trie树上节点为j时最少替换的字符数;则答案为min(f[len][j]), ...原创 2019-08-13 15:24:28 · 368 阅读 · 0 评论 -
HDU 6606. Distribution of books (DP+线段树)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=6606题意:n个数,可以选择前m(m自定)个数分成k块,问每块的数字和的最大值最小是多少。n∈[1, 2e5],k∈[1, n]分析:先求前缀和leftSum[],然后对前缀和离散化;对leftSum[]排序并去重得到pre[];设f[i]=前i个数最多能分成的块数;二分答案,设答案为x;...原创 2019-07-30 11:50:16 · 700 阅读 · 0 评论 -
HDU 6578. Blank (DP)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=6578题意:N个位置,M个限制条件;每个位置填入{0,1,2,3}中的一个数;每个限制条件(L,R,X),要求[L,R]区间内有X种不同的数;输出方案数。分析:设{0,1,2,3}最后出现的位置排完序后为(i,j,k,l),未出现为0;f[i][j][k][l]代表(i,j,k,l)这种状...原创 2019-07-25 09:43:41 · 542 阅读 · 0 评论 -
Codeforces 366C. Dima and Salad (DP)
题目: http://codeforces.com/problemset/problem/366/C题意:n个物品,每个物品两个属性(ai,bi);给定一个数k,求是否能选择m个物品使得满足:输出满足条件的最大的 ∑aj分析:∑aj / ∑bj = k∑aj - k*∑bj =0将每个物品的属性改为 cj = aj - k*bj;那么条件变为选择一些物品使得∑cj=0变成一个...原创 2019-01-23 16:58:26 · 425 阅读 · 0 评论 -
hdu3652 B-number (数位DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3652分析: 数位DP代码:#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;algorithm&gt;#include &lt;vector&gt;using namespace std;t原创 2018-08-02 21:25:37 · 116 阅读 · 0 评论 -
hdu6321 Dynamic Graph Matching (2018多校第三场1003) (状压+DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6321题意: n个点,m个操作; 每次操作可以加边或减边; 每次操作后输出包含1,2,…,n/2条边的合法方案数; 一个合法方案要求:所有边的连接的顶点不能有重复的;分析: 状压状态为S 加边时:f[S]+=f[S-(1&lt;#include &lt;bits/stdc++.h&g...原创 2018-07-30 20:02:11 · 281 阅读 · 0 评论 -
牛客 - Psd面试
题目:https://www.nowcoder.com/acm/contest/90/D题意: 求最长回文子序列(注意不是子串)分析: 法一:直接O(n^2) DP f[i][j] = max( f[i+1][j] , f[i][j-1] , f[i+1][j-1]+2 ) , s[i]==s[j] = max( f[i+1][j] , f[i][j-1] ) ...原创 2018-03-26 21:23:56 · 162 阅读 · 0 评论 -
Codeforces Round#466 E. Cashback
题目: http://codeforces.com/contest/940/problem/E题意: 给一串数,能把它分成连续的几段,每段有一个分值,求分值和最小能为多少; 分值计算方法:假设这段有k个数,则分值为除去前 个数(c为常数)之后的和。分析: 考虑若有c+1个数,则可以把c个数分为1段,1个数分为另一段; 因为若c+1个数中的最小值在两头,则答案更优,若在中间,则答...原创 2018-02-24 22:11:50 · 324 阅读 · 0 评论 -
Codeforces#462 C. A Twisty Movement
题目: http://codeforces.com/contest/934/problem/C题意: 给一段仅由1 2组成的数列; 可以选择两个数l<=r,反转[l,r]; 求可得到的最大不下降子序列是多长;分析: 动态规划; 首先由前缀和(one[i],two[i])分别统计出区间内的1 2个数; 接下来分析: ①、最长子序列全部由1组成 ②、最长子序列全部由2组...原创 2018-02-16 11:32:48 · 311 阅读 · 0 评论 -
Codeforces Gym 101498K. Two Subarrays
题目: http://codeforces.com/gym/101498/problem/K题意: 一个数组的stength这样定义: 给定一个数组,求两个互不相交的子数组的strength差值的绝对值的最大值分析: 由于n到了1e5,T又有1e2,所以应该是一个O(n)的算法或者O(nlogn)的算法; 这里用O(n)的DP; lf[i][2]:以i开头,奇/偶数个项的最大值...原创 2018-02-27 10:15:44 · 301 阅读 · 0 评论 -
Codevs2800 送外卖
题目:http://codevs.cn/problem/2800/# 分析:floyd+状压dp. 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=25,Tmax2=70005,inf=0x3f3f3f3f;int n,d[Tmax][Tmax],f原创 2015-11-01 08:56:10 · 620 阅读 · 0 评论 -
OpenJudge1413 Mondriaan's Dream
题目:http://noi.openjudge.cn/ch0405/1413/ 分析:DP.二进制按位压缩,此位向下伸出为1,不伸出为0,f[i][j]表示i行状态为j时的方案数,则f[0][0]=1;答案即为f[n][0]. 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;con原创 2015-10-31 16:52:18 · 579 阅读 · 1 评论 -
BZOJ4300 绝世好题
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=4300 分析:DP.一开始想错了:以为认定一位,有最多数的就是答案,后来发现不一定子序列所有数都具有这一位,因为只是bi与bi-1关系。。。于是开始了正解之旅。。 代码:#include <cstdio>#include <algorithm>#include <cstring>usin原创 2015-10-30 20:48:49 · 418 阅读 · 0 评论 -
NOI库7627 鸡蛋的硬度
题目:http://noi.openjudge.cn/ch0206/7627/ 分析:DP 1.先想一个简单问题:只有两个鸡蛋的问题 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见两个鸡蛋–一道Google面试题) 这是典型的动态规划问题。假设f[n]表原创 2015-09-29 09:06:24 · 4354 阅读 · 3 评论 -
SCOI2009 windy数
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析:lzr大神给我们讲的是3维的,从网上学了个2维的。自己写的也是错误百出。 代码:#include <cstdio>#include <algorithm>using namespace std;const long long int p[15]={0,1,10,100,10原创 2015-09-12 21:41:04 · 336 阅读 · 0 评论 -
HAOI2008 玩具取名
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1055 分析:DP,写的记忆化搜索。f[i][j][k]表示区间[i,j]能否转化成k。 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=205原创 2015-09-12 18:31:49 · 381 阅读 · 0 评论 -
NOI库7614 最低通行费
题目:http://noi.openjudge.cn/ch0206/7614/ 分析:DP 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=105;int n,data[Tmax][Tmax],f[Tmax][Tmax];void work(){原创 2015-09-26 16:01:37 · 730 阅读 · 0 评论 -
NOIP2011 选择客栈
题目:http://www.luogu.org/problem/show?pid=1311# 分析: 用sum[i][j]记录前i个中颜色为j的有多少个,可以O(nk)预处理出来。 当w[i]<=p时,i对答案的贡献就是sum[i-1][color[i]]。 当w[i]>p时,i对答案的贡献就是sum[last][color[i]],last是最后一个满足w[i]<=p的元素序号。 总时间原创 2015-09-10 23:29:21 · 369 阅读 · 0 评论 -
CF479 Riding in a Lift
题目:http://codeforces.com/problemset/problem/479/E 分析:前缀和优化的DP.一开始写跪了,但今天几分钟写出来了,于是得出一个结论:千万不要吝啬一个变量,只要能简化代码! 代码:#include <cstdio>#include <algorithm>using namespace std;const int Tmax=5005;const原创 2015-09-24 21:20:10 · 327 阅读 · 0 评论 -
POJ1644 放苹果
题目:http://poj.org/problem?id=1664 分析:DP.就是一个整数划分模型. 代码:#include <cstdio>#include <algorithm>using namespace std;const int Tmax=20;int f[Tmax][Tmax];int dp(int m,int n){ if(f[m][n]>0) retu原创 2015-09-24 21:56:18 · 368 阅读 · 0 评论 -
BestCoder#52 Victor and World
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5418 分析:Floyd出任两个国家之间最短距离,然后DP。f[S][i]表示访问状态为S且最后一个访问的为i的最小值。则f[S|(1<<(i-1))][i]=min(f[S][j]+dist[i][j]) 其中S&(1<<(j-1))>0且ij连通。 答案即。所以时间复杂度:O[n^3+(2^n)*(原创 2015-08-24 11:05:29 · 354 阅读 · 0 评论 -
noip2010 乌龟棋
地址:http://www.luogu.org/problem/show?pid=1541# 分析: 简单的动态规划 一开始我定义的状态是f[i][j][k][l],i是当前格数,jkl是前三种卡片数,则由m-i-k-l可得第四种卡片数,然后发现数组太大开不下来。 然后又定义f[i][j][k][l]为4种卡片各用了多少,则当前格数原创 2015-07-28 20:24:08 · 249 阅读 · 0 评论 -
OpenJudge1665 完美覆盖
题目:http://noi.openjudge.cn/ch0405/1665/ 分析:完整的2*2矩形有3种拼法,所以f[n]+=3*f[n-2]。 当突出两块时:突出的两块时上侧两个:发现往后拼只有一种方法。突出的两块在下侧时同样一个,于是用这种突出的方法拼出f[n]有两种。即f[n]+=2*(f[n-4]+f[n-6]+..+f[0]). 于是f[n]=3*f[n-2]+2*(f[n-4]原创 2015-11-04 10:39:01 · 1487 阅读 · 0 评论 -
OpenJudge2989 糖果
题目:http://noi.openjudge.cn/ch0206/2989/ 分析:普通背包.. 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=105;int n,k,f[Tmax][Tmax];int main(){ int i,j原创 2015-11-04 21:44:10 · 851 阅读 · 0 评论 -
NOI库7624 山区建小学
题目:http://noi.openjudge.cn/ch0206/7624/ 分析:区间DP。f[n][m]表示1..n中建m个小学的最小花费。 一开始写递推又写跪了。。然后果断改写记忆化搜索,果然考场上甚写递推(大牛勿喷)。。 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;原创 2015-10-15 17:10:48 · 2954 阅读 · 0 评论 -
OpenJudge1249 Humble Numbers
题目:http://noi.openjudge.cn/ch0405/1249/ 分析:一开始这题写的优先队列,后来发现了更好的做法——DP.经典的取最小+去重DP 代码:#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=5842,pri[5]={0,2,3,5原创 2015-10-29 19:08:25 · 523 阅读 · 0 评论 -
BC#59 The Highest Mark
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5501 分析:首先贪心分析。考虑…x1 x2….互换x1x2不影响其他题对答案的贡献,那么得出互换的条件,于是得到结论:按B/C的顺序排序。这里注意,不要写除法,会被卡,分子分母交叉乘起来比较大小。 然后需要一个01背包DP。这题与SD夏令营挂项链一题极为相似,当时我也没有想明白为什么贪心后还要DP,现在原创 2015-10-14 15:09:24 · 585 阅读 · 0 评论