DP
ao-奥
这个作者很懒,什么都没留下…
展开
-
洛谷 1020 导弹拦截 (LIS,贪心,二分)
题目链接题意:找最长不上升子序列和最少的不上升子序列划分个数。题解:用O(n*n)的复杂度只能过一半。常规做法是用贪心二分优化:用数组保存结尾的数,显然结尾的数越大越好。对于a[i],如果a[i]<=f[len],那么就就直接将a[i]加入,否则在前面二分,更新前面的结尾。然后第二问有一个组合数学的定理:最少的不上升子序列划分数等于最长下降子列的长度。//之前C4比赛L2列车调度也用过这个定...原创 2018-04-14 12:05:58 · 1325 阅读 · 0 评论 -
HDU 1087 DP水题
http://acm.hdu.edu.cn/showproblem.php?pid=1087题意:求和最大的上升子序列。题解:dp;代码:#include <iostream>#include<cstdio>#include<cstring>using namespace std;long long dp[1005],a[1005];...原创 2018-08-08 15:28:36 · 123 阅读 · 0 评论 -
HDU 2059 龟兔赛跑 DP
http://acm.hdu.edu.cn/showproblem.php?pid=2059题意:中文题解:dp[i]表示到第i个充电站需要的最短时间。转移时枚举前面的充电站作为最后一个充电站时候的值。起点设为第0个充电站,七点不需要充电,所以设为负数抵消充电费用。代码:#include <iostream>#include <cstdio>using...原创 2018-08-15 17:05:34 · 152 阅读 · 0 评论 -
洛谷 1437 敲砖块 DP
https://www.luogu.org/problemnew/show/P1437题意:中文题题解:先旋转三角形。然后要打掉第i行第j个,就要打掉第i行第j-1个和第i-1行第j-1个。所以到第i,j元素时,对于第i行,前j都被打掉,后面的都没被打掉。但是对于第i-1行,前j-1一定被打掉,但后面的可以被打掉,也可以不打掉。所以状态转移就很好写了。代码:#includ...原创 2018-08-08 17:05:16 · 187 阅读 · 0 评论 -
浅谈用极大化思想解决最大子矩形问题
【摘要】 本文针对一类近期经常出现的有关最大(或最优)子矩形及相关变形问题,介绍了极大化思想在这类问题中的应用。分析了两个具有一定通用性的算法。并通过一些例题讲述了这些算法选择和使用时的一些技巧。 【关键字】 矩形,障碍点,极大子矩形 【正文】一、 问题最大子矩形问题:在一个给定的矩形网格中有一些障碍点,要找出网格内部不包含任何障碍点,且边界与坐标轴平行的最大...转载 2018-08-08 18:18:30 · 451 阅读 · 0 评论 -
洛谷 4147 玉蟾宫 DP 悬线法
https://www.luogu.org/problemnew/show/P4147题意:寻找面积最大的由F构成的子矩阵题解:悬线法模板题代码:#include <iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1005;int...原创 2018-08-08 19:08:15 · 218 阅读 · 0 评论 -
洛谷 1169 棋盘制作 DP
https://www.luogu.org/problemnew/show/P1169题解:一开始一直在想怎么处理间隔。发现题解是按照奇偶取反转换成了玉蟾宫,……真的很巧妙,求正方形就是取矩形较小的边平方代码:#include <iostream>#include<cstdio>#include<cstring>using namespace...原创 2018-08-08 21:02:48 · 220 阅读 · 0 评论 -
HDU 5009 Paint Pearls DP 双向链表
http://acm.hdu.edu.cn/showproblem.php?pid=5009题意:对一段字符串操作,一次操作可以操作一段连续的区间,开销为这段区间颜色种类数的平方。求使字符串每一个元素都被操作过至少一次的最小开销。题解:DP的转移过程挺好想,就是(num(j,i)表示区间[i,j]的颜色种类数)但是朴素的写会超时。算一下样例二会发现中间一大段只有3,2,4三种颜色,这一...原创 2018-08-13 21:50:29 · 134 阅读 · 0 评论 -
HDU 2476 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=2476题解:区间DPdp[i][j]表示把一个空的表中的[i,j]区间涂成s2需要的最少步数。然后再DP一遍,这次考虑到s1已经有的颜色对步数的优化。代码:#include <iostream>#include <cstdio>#include <cstri...原创 2018-08-18 22:38:00 · 108 阅读 · 0 评论 -
HDU 3652 B-number 数位DP
http://acm.hdu.edu.cn/showproblem.php?pid=3652题意:如果一个数含有‘13’并且可以被13整除,就叫他b数,对于给定N求不大于N 的b数的个数。题解:数位DP模板题。代码:#include <iostream>#include <cstdio>#include <cstring>using na...原创 2018-08-18 22:42:04 · 131 阅读 · 0 评论 -
HDU 4283 You Are the One 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=4283题意:一队人在排队,每个人有一个数值m,他的不满值等于m*k,k是他要等的人数。比如队中第三个人他的不满值就是m*2.但是你现在有一个栈,你可以把人入栈,先访问他后面的人,这样来改变顺序。求最小的不满。题解:我一开始以为是用栈模拟,搞了好久……最后发现是一个区间DP;对于一段区间[i,j...原创 2018-08-19 16:47:54 · 182 阅读 · 0 评论 -
pta-top 1002 Business
题目 题意:有很多任务,完成任务可以获得受益,每个任务有所需时间和截至日期,不能同时做两个任务,问合理选择任务能达到的最大收益。 题解:显然01背包,把容量限制和截止日期限制取交集即可。但是要注意应该先按照截至日期从早到晚排序。因为同等容量下,把截至日期早的放后面的组合一定可以换成把截至日期放前面,反之不一定可以。所以排序后不会漏情况。 代码:#include<cst...原创 2019-01-23 16:53:22 · 269 阅读 · 0 评论 -
pta-L3-001 凑零钱 01背包
题目题意:给出所有钞票,凑出给定金额,输出用了哪些钱,并且要求钱的序列最小。题解:01背包,要求最小实际上就是要求尽量长。代码:#include <iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn = 1e4+5;const i...原创 2019-02-05 21:23:55 · 867 阅读 · 2 评论 -
BZOJ 1055 玩具取名 区间DP
https://www.lydsy.com/JudgeOnline/problem.php?id=1055题意:中文题解:DP[i][j][k]表示区间i到j能否合成字符k;s[i][j][k]表示合成字符i的第j种方法的第k个字符。代码:#include <iostream>#include<cstdio>#include<cstring&...原创 2018-08-14 15:02:02 · 134 阅读 · 0 评论 -
BZOJ 1079 着色方案 记忆化搜索 DP
https://www.lydsy.com/JudgeOnline/problem.php?id=1079题意:中文题解:开一个六维数组,ai表示能使用i次的颜色数目,last 表示上一次用的颜色当时能用几次。代码:#include <iostream>#include<cstdio>#include<cstring>using nam...原创 2018-08-14 13:50:15 · 167 阅读 · 0 评论 -
POJ 2385 Apple Catching
Apple CatchingTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14280 Accepted: 6986DescriptionIt is a little known fact that cows love apples. Farmer John has two apple trees (which are con...原创 2018-04-18 15:53:40 · 107 阅读 · 0 评论 -
HDU3001 travelling 状压DP
题目题意:旅行商问题,特点是一个点最多经过两次。题解:和只能经过一次的旅行商一样使用状态压缩,但是不用二进制而是用三进制表示。#include <iostream>#include<cstdio>#include<cstring>using namespace std;int f3[11];void pow3()//3的次幂打表{ int i; ...原创 2018-05-23 23:41:58 · 161 阅读 · 0 评论 -
HYSBZ 1207 打鼹鼠 LIS DP
点击打开链接中文就不说题意了。题解:最长不下降子序列的变种,dp[i]表示最后一个打i时的最大打击个数。#include <iostream>#include<cstdio>using namespace std;struct node{ int time,x,y;}a[100010];int max1(int x,int y){ return x>y?...原创 2018-05-29 19:58:00 · 123 阅读 · 0 评论 -
POJ 3660 Cow Contest floyd_warshall
题意:给n个数,和m个大小关系,问有多少个数能确定他在这个数列中大小的排名。题解:floyd_warshall算法,大小关系就用路表示dis[i][j]==1表示i,j关系已知且i<j;更新就是i<k,k<j得i<j;搞完之后,检查一遍,如果一个点和其他n-1个点都明确了关系,这个点的名次就定了。#include<cstdio>#include<iost...原创 2018-06-15 20:58:35 · 150 阅读 · 0 评论 -
HDU1176 DP
题意:中问题题解:是摘苹果的升级版,要从最后的时间节点往前递推,得到从5开始的最大馅饼数。注意处理边界问题。代码:#include <cstdio> #include <cstring> #include <iostream> using namespace std; int a[100005][12]; int main() { ...原创 2018-06-18 14:03:40 · 95 阅读 · 0 评论 -
openJ_POJ 1009 A Lost Widget
http://poj.openjudge.cn/practice/1009?lang=en_US题意:背包问题。count(i,j)表示不用i号物品装满j容量背包的方法数。打表输出所有的count(i,j)的个位。题解:先用常规的背包,dp[i][j]表示使用前i号物品装满j背包的方法数,转移方程为:然后用f[i][j]表示count(i,j)。如果a[i]>j,那么,因为本来就...原创 2018-07-23 11:51:48 · 136 阅读 · 0 评论 -
洛谷 1063 能量项链
https://www.luogu.org/problemnew/show/P1063题解:区间DP,环可以通过复制一份接在后面转化成链进行DP;代码:#include <iostream>#include <cstdio>using namespace std;int a[205];int dp[205][205];int main(){ in...原创 2018-08-10 13:45:24 · 226 阅读 · 1 评论 -
洛谷 1880 石子合并 区间DP
题解:区间DP注意寻找最小值,要在dp结束后寻找。代码:#include <iostream>#include<cstdio>using namespace std;int a[205];int dp[2][205][205],n;int sum[205];int main(){ scanf("%d",&n); int maxn=0...原创 2018-08-10 14:21:18 · 194 阅读 · 1 评论 -
洛谷 1220 关路灯 区间DP
题解:关掉一个区间的等,可以转换成更小的区间,区别在于从这个小区间的哪一段跑。代码:#include <iostream>#include <cstdio>#include<cstring>#define maxn 60using namespace std;int a[maxn],b[maxn],f[maxn][maxn][2],sum[m...原创 2018-08-10 15:34:34 · 212 阅读 · 0 评论 -
Uva 12563 Jin Ge Jin Qu hao 01背包
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4008题意:在ktv唱歌,在规定时间内要唱尽量多的歌,在歌最多的前提下,要唱尽量长的时间(最后要剩一秒以上用来点最受欢迎的劲歌金曲题解:01背包,但是要注意这里还要求时间长。...原创 2018-08-01 21:40:45 · 142 阅读 · 0 评论 -
洛谷 2622 关灯问题 Ⅱ BFS 状压
https://www.luogu.org/problemnew/show/P2622题解:压缩成二进制BFS;代码:#include <iostream>#include<cstdio>#include<cstring>#include<queue>#define maxs 2050#define maxm 105#def...原创 2018-08-10 18:30:28 · 232 阅读 · 0 评论 -
SCOI 2005 互不侵犯 状压DP
题解:状压DP,先预处理出一行的情况,可以省很多时间。最后统计的时候,只统计最后一行,因为前几行成功的方案数也被统计到了最后一行。最后注意longlong代码:#include <iostream>#include<cstdio>#define maxs 2050using namespace std;int king[maxs],state[maxs];...原创 2018-08-10 20:01:00 · 130 阅读 · 0 评论 -
pta-L3-011 直捣黄龙 dijkstra
题目题意:求最短路,同等长度下取经过最多城镇的,同等城镇数下取杀敌最多的。输出最短路径数,最短距离,杀敌数。题解:和L2的紧急救援非常类似。三角更新的时候分类讨论即可。输出是倒序可以用函数递归输出。地名因为是三个大写字母所以用26进制表示,然后开数组存一下对应关系就好了。代码:#include <iostream>#include<cstdio...原创 2019-02-11 21:15:07 · 888 阅读 · 0 评论