随笔分类 - 动态规划——dp优化
摘要:经典的石子合并问题,代价w(i,j)满足四边形不等式的性质,所以可以通过决策的单调性求解 代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N = 500; int f[N
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/306/ 给出n行字符串,现在将其排版,定义一个不协调度,dp中只需要记录阶段为前i个句子已经排好版,不需要记录排了多少行。通过dp进行转移之后发现如果用朴素算法一定会超时。 经过对代价函
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/305/ 题目给出n坐山,m只小猫,每只小猫到山Hi去玩Ti小时,两座山之间的距离已知,现在有p个饲养者去带这些猫回家,他们只能在猫玩了Ti小时之后才能接到她,小猫玩完就会等待来接,问这些小猫的总的等待时间最少是
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/302/ 给出n个任务,每个任务需要T[i]的时间完成,在第j个时间完成的代价是C[i],任务分批完成,每一批的完成时间是一样的,每个批次都有一个S的启动机器的时间。 问完成这些任务所需要
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/6/ 通过单调队列优化多重背包,从第i-1阶段向第i阶段过渡,将所有可能的决策包含在单调队列中,队列中维护的是一个递减的决策集合,对应的函数值也是递减的,及时去除不可能是最优的解。 在O(
阅读全文
摘要:题目链接:https://www.acwing.com/video/864/ 给定一个长度为n的序列,问将这个序列分成连续的若干段,每段不超过M的情况下,每段的最大值之和最小是多少? 如果数据范围比较小的话就可以不进行任何优化,用dp[i]表示将[1,i]分成若干段满足条件的情况下每段最大值最小的情
阅读全文
摘要:题目链接:http://poj.org/problem?id=1821 题目给出长度为N的线段,需要m个人去覆盖,每小段可以覆盖也可以不覆盖,没人都可选择覆盖和不覆盖,如果覆盖的话一定要覆盖Si,而且长度不能超过Li,每一段的报酬是Pi,问最高多少报酬。 显然状态就是前i个人覆盖前j段。转移的初始状
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 求一个长度为n的序列的长度为m的严格上升子序列的数量,dp的状态是前i个数中长度为j的严格上升子序列且以第i个数结尾的决策数量。 转移方式:长度为i-1向长度为i转移,枚举位置比它小而且值比它小的
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/298/ 题目给定一个长区间[m,e]和一些短区间,短区间上有花费,问覆盖长区间的最小话费是多少? 通过dp可以在最少区间数模型上进行修改,转移的时候算上的是花费值,最后用线段树维护一下区间最小值即可。时间复杂度
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/297/ 给定区间长度,和n个区间,问最少多少个区间能够覆盖[1,m]长度的区间。 dp状态:到i位置覆盖了[1,i]需要的最少区间数量,转移方程是:先找所有右端点是i的区间,其左右端点分别是l,r,那么f[l-
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/296/ 定义conn(s,n)表示由n个s拼接的字符串,问最大的m满足conn(s2,m)能通过conn(s1,n)生成,生成就是去掉一些位置的字符之后能够变成s1。 通过倍增的思想,可
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/295/ 题目给定n个城市,在一个方向上有序排列,每个城市有高度,有两个人a,b,定义两个城市之间的距离是高度之差的绝对值。b只会选择右边距离他最小的一个作为下一个点,a只会选择右边次小的点作为下一个点。a先走。
阅读全文