
动态规划-基础
文章平均质量分 76
Rain722
这个作者很懒,什么都没留下…
展开
-
POJ1088滑雪(记忆化搜索与dp)
记忆化搜索代码:#include#include#includeusing namespace std;int Map[105][105], Step[105][105];int nx[] = {0, 1, 0, -1};int ny[] = {1, 0, -1, 0};int R, C, ans;int dfs(int r, int c){ if(Step[r][c]原创 2016-09-23 18:46:56 · 540 阅读 · 0 评论 -
ZOJ 3380 Patchouli's Spell Cards [基础概率DP+大数]
Patchouli's Spell CardsTime Limit: 7 Seconds Memory Limit: 65536 KBPatchouli Knowledge, the unmoving great library, is a magician who has settled down in the Scarlet Devil Mansion (紅魔館).原创 2017-04-26 15:32:45 · 509 阅读 · 0 评论 -
POJ 2096Collecting Bugs(概率期望dp)
题意有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n。求他找到s个系统的bug,n种bug,需要的天数的期望。分析计算期望E=∑所有可能需要的天数*概率找到s个系统n种bug,需要最少max(s,n)天,而可能的天数是无穷的,这样计算很复杂,复杂到算不了。所以考虑dp,期原创 2017-04-26 20:17:10 · 391 阅读 · 0 评论 -
poj2686Traveling by Stagecoach状态压缩dp
#include#include#include#includeusing namespace std;const int MAXN = 35;const double INF = 0x3f3f3f3f*1.0;int n, m, p, a, b;int ticket[MAXN], d[MAXN][MAXN];int main(){ double **dp; w原创 2016-09-07 20:52:56 · 630 阅读 · 0 评论 -
ZOJ3777Problem Arrangement(状态压缩dp)
题目传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777题意:给出n道题目以及每一道题目在不同顺序做的时候的兴趣值,让你求出所有的做题顺序与所有做题顺序中兴趣值不小于m的比例。按一个最简分数表示。分析:全排列肯定会超时,所以只能用状压。但是想状压的时候,我想到的只是记录已经安排好了几个做题,但不知原创 2017-03-20 18:40:15 · 400 阅读 · 0 评论 -
HDU5135Little Zu Chongzhi's Triangles(状态压缩DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135题意:给出n根木棍,随意组成几个三角形,问组合的面积最大是多少;思路:用状态压缩,首先把可以组成的三角形的合法情况全都放进vector里,然后枚举。#includeusing namespace std;int s[12];do原创 2017-07-22 19:44:41 · 307 阅读 · 0 评论 -
Lightoj1021Painful Bases (状压DP)
1021 - Painful BasesPDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 32 MBAs you know that sometimes base conversion is a painful task原创 2017-07-27 21:44:13 · 533 阅读 · 0 评论 -
LightOJ1011Marriage Ceremonies(状压DP)
题意:输入n 输入n行n列 从n行中找出n个数 保证任意两个都不在同一列 求这些数的和。#includeusing namespace std;const int maxn = 17;int a[maxn][maxn];int dp[17][(1<<16)];int cal(int x){ int len = 0; while(x) {原创 2017-08-02 16:01:52 · 478 阅读 · 0 评论 -
HDU4778Gems Fight!(状态压缩DP)
题目大意:有B个盒子里面放有G种颜色的宝石,两个人轮流选一个盒子将其中的宝石取出来放到一个锅里,然后其中没有S个相同颜色的宝石,它们就会聚合在一起变成一个魔法石(可能产生多个魔法石且锅里有可能有剩余的宝石),然后本轮的得分就是产生的魔法石的数量,且如果本轮某个人拿到了魔法石的话,那么下一轮他还可以继续选择盒子放入宝石,知道他在某一轮没有拿到魔法石,现在问两个人都采用最优策略的情况下,到最后原创 2017-09-28 11:30:27 · 287 阅读 · 0 评论 -
HDU2196Computer(树形DP)
ComputerTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6492 Accepted Submission(s): 3273Problem DescriptionA school bought t原创 2017-02-22 21:23:40 · 421 阅读 · 0 评论 -
CodeForces - 148D.Bag of mice(概率dp)
题目大意:Pear和Fish正在进行这样一个游戏:一个袋子里一开始装着w个白球和b个黑球。从Pear开始,每次轮流随机抽出一个球。如果抽出的球是白色的,则抽出这个球的人立即获胜。每当一个球被Fish取出后,会有另一个球滚出来(不算任何人抽的)。但Pear取出时很小心,不会让球滚出来。每个人抽球、和自动滚出来的球都是等概率的。那么Pear获胜率是多少呢?如果最后袋子里没有球了,并且没原创 2017-04-25 15:02:22 · 387 阅读 · 0 评论 -
POJ - 2151Check the difficulty of problems(概率DP)
Check the difficulty of problemsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 7530 Accepted: 3228DescriptionOrganizing a programming contest is not原创 2017-04-25 14:39:17 · 664 阅读 · 0 评论 -
POJ 3071 Football(概率DP)
FootballTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5442 Accepted: 2775DescriptionConsider a single-elimination football tournament involving 2n t原创 2017-04-24 20:29:58 · 406 阅读 · 0 评论 -
UVA707Robbery(记忆化搜索)
题意:、一个n*m的城市,有小偷会偷银行,小偷偷东西t分钟后,城市会被全部封锁,然后会有q次排查,每次排查的范围是一个矩形,给出左上角坐标(a,b)和右下角坐标(c,d),格式为t a,b,c,d,表示这个范围该时间小偷不在,输出所有小偷可能在的位置和时间。小偷在此过程中每秒最多可以移动一个单位的距离分析:一共有三种情况,确定小偷所在的位置和时间,小偷逃离城市,一无所获,要描述一个状态原创 2017-08-09 20:51:29 · 331 阅读 · 0 评论 -
Bestcoder#92Girls Love 233(dp)
Bestcoder#92Girls Love问题描述除了翘课以外,结识新的妹子也是呃喵重要的日程安排之一。这不,呃喵又混进了一个叫做ACgirls的女生群里,来达成自己不可描述的目的。然而,呃喵只会喵了个咪地说话,于是很容易引起注意。为了掩饰自己的真实身份,呃喵每次说话都小心翼翼。她知道,很多女生都喜欢说"233",然而呃喵想说的话一开始就确定好了,所以她要对这句话做修改。这句话的长度为n,语句里的字符不是'2'就是'3'。呃原创 2017-02-26 21:05:56 · 990 阅读 · 0 评论 -
51Nod1202子序列个数
子序列的定义:对于一个序列a=a[1],a[2],......a[n]。则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。原创 2017-04-24 18:52:09 · 612 阅读 · 0 评论 -
HDU5904LCIS(最长公共上升子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5904问题描述Alex有两个序列a_1,a_2,...,a_na1,a2,...,an和b_1,b_2,...,b_mb1,b2,...,bm. 他想找到它们的最长公共递增子序列, 并且这个子序列的值是连续的(x,x+1,...,y-1,yx,x+1,原创 2016-09-25 15:28:45 · 777 阅读 · 1 评论 -
HDU5532 Almost Sorted Array(最长不上升子序列or暴力)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5532题目大意:给出n个数,问如果去掉其中一个数,能否构成不上升或者不下降的序列。思路:最直观的就是通过判断原数列的最长不上升(或者不下降)子序列的长度,如果长度len>=n-1,那就是YES,否则就是NO。这里可以用nlogn的算法。还有一种原创 2016-12-02 21:26:28 · 416 阅读 · 0 评论 -
HDU5542(树状数组优化DP)
题意:给你n(1e3)个数,每个数都在[1,1e9]范围。 然后让你保持数的顺序不变,选出长度恰好为m(1问你有多少种选择方案原创 2017-08-22 08:59:33 · 582 阅读 · 0 评论 -
HDU5773 The All-purpose Zero(LIS变形)
题意:可以将0替换成任意interger(包括负数),在此基础上求最长递增子序列。思路:将所有的0全部提取出来,求出此时序列的LIS(不含0的),这是针对0在子序列的外面的情况,如0,1,2,3,0.那么如果0在子序列中间怎么办?很简单,把读入的非0的数的值减去这个数前面0的个数即可,如1,2,0,3,4。在提取出0后序列其实为1,2原创 2017-09-01 12:19:28 · 310 阅读 · 0 评论 -
qut1362麻烦的转盘(概率dp或递推)
来源:青理交流赛有一个转盘,如下图所示,问转动n次转盘,总和为m的概率是多少 输入输入n和m(1输出题目要求的概率值,结果保留4位小数样例输入1 13 4样例输出0.25000.0469分析:概率dp入门题记录每个状态有可能有哪几种后继状态可能#include#includeusin原创 2016-11-27 21:46:18 · 364 阅读 · 0 评论 -
POJ 3744 Scout YYF I (矩阵优化的概率DP)
Scout YYF ITime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8611 Accepted: 2524DescriptionYYF is a couragous scout. Now he is on a dangerous mission wh原创 2017-04-24 20:24:00 · 628 阅读 · 0 评论 -
uva1484 Alice and Bob's Trip (树形dp)
大佬博客链接:http://blog.youkuaiyun.com/shuangde800/article/details/9974599题意给一棵n个结点的树,结点编号为0~n-1,顶点是0每条边都有一个权值。Alice和Bob初始位置在顶点,要往下一直走到叶子结点。第一次是由Bob选择走向哪个子结点,第二次轮到Alice,依次轮流下去...每走过一条边就会获得相应的权值,Bob希望原创 2017-04-06 11:40:26 · 402 阅读 · 0 评论 -
树的重心
这是找树的重心的经典题目。树的重心有下面几条常见性质:定义1:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。定义2:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。性质1:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。性质2:把两个树通过一条边相连得到一个新的树,那原创 2017-04-06 16:20:19 · 1051 阅读 · 0 评论 -
Codeforces 607A Chain Reaction(二分 + dp)
A. Chain Reactiontime limit per test 2 secondsmemory limit per test 256 megabytesinput standard inputoutput standard outputThere are n beacons located at distin原创 2017-05-11 17:23:21 · 497 阅读 · 0 评论 -
CODE[VS]1043 方格取数(多进程DP)
题目描述 Description设有N*N的方格图(N 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 输入描述 Input Description输入的第一行为一个整数N(原创 2017-04-17 20:58:51 · 899 阅读 · 0 评论 -
CODE[VS]1169传纸条
题目描述 Description小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下原创 2017-04-17 21:01:36 · 478 阅读 · 0 评论 -
UVALive5092Permutation Counting(DP)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3093题目大意:问1-n的数组成的排列,其中ai > i的个数恰好等于k的排列有多少种。分析:dp[i][j]表示n个数组成的排列有多少满足条件k的个数原创 2017-03-31 18:10:35 · 429 阅读 · 0 评论 -
Gym - 101128E Wooden Signs(DP)
题目链接:https://odzkskevi.qnssl.com/3699857ff0a17d77d1099699cdf4da13?v=1490503337题目大意:一共n块木板,前两个数给出最底下木块的两个端点,后面n-1个数给出第i层的一个固定端点,问你木块的所有放置情况。分析:由下层的不同放置方式可以引出上层的各种不同放置方式,直接dp就行。#in原创 2017-03-28 16:56:26 · 569 阅读 · 0 评论 -
POJ1384Piggy-Bank
小猪储蓄罐.哈哈哈!题目大意:给出空的储蓄罐和满的储蓄罐的重量。给出n中硬币,每种硬币的value和weight,求出满足重量的最小value和,如果不能满足就输出“This is impossible.”。#includeusing namespace std;const int maxn = 100005;string s[maxn];int c[maxn]原创 2016-08-14 16:51:14 · 402 阅读 · 0 评论 -
hdu5945Fxx and game(单调队列+dp)
Fxx and game Accepts: 74 Submissions: 1857 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)问题描述青年理论计算机科学家Fxx给的学生设计了一款数字游戏。一开始你将会得到一个数\原创 2016-10-31 16:19:13 · 447 阅读 · 0 评论 -
Codeforces#245D. Working out(dp)
题意及qduoj链接:https://qduoj.com/problem/118/思路:把原先的两对起点和终点转化为四个七点,那么就有左上角、右下角、左下角、右上角这样四个七点。用4个dp[i][j],表示起点到(i,j)这个点的最大值!然后枚举相遇点,求出最大值!仔细分析一下之后,可以知道相遇点不可能在第一列&&第一行&&最后一列&&最后一行,如果枚举这些点,就会出错原创 2017-01-12 15:31:31 · 585 阅读 · 0 评论 -
最大子阵(dp)
思路:由最大子段和的dp算法演变过来,hdu的Max Sum即是求最大子段和的。有了这个一维的算法,现在是二维,那么我们就枚举行即高的所有可能,若r,k表示第r行和第k行(r#include#include#include#includeusing namespace std;const int maxn = 505;int a[maxn][maxn], b[maxn], dp原创 2017-02-15 13:37:21 · 337 阅读 · 0 评论 -
HDU 5119 Happy Matt Friends(DP)
题意:有N个人,每个人有一个权值,挑选一些人并将他们的权值异或,求最后得到的值大于M的取法有多少种思路:类似于背包,枚举的是异或的和,给定的数你可以选择放或者不放,dp[i][j]代表的是前 i 个数中选择k个异或的和为j。#includeusing namespace std;typedef long long ll;ll dp[2][1<<20];int a[42]原创 2017-07-22 19:47:58 · 299 阅读 · 0 评论 -
Codeforces835D-Palindromic characteristics(DP)
Palindromic characteristicstime limit per test 3 secondsmemory limit per test 256 megabytesinput standard inputoutput standard outputPalindromic characteristics原创 2017-08-02 10:42:42 · 540 阅读 · 0 评论 -
HDU6103Kirinriki(前缀和+二分)
非常优雅的前缀和,非常优雅的做法#includeusing namespace std;#define pii pairtypedef long long ll;const int maxn = 5005;char s[5005];unsigned short dp[maxn][maxn];int len, m;bool check(int mid){ for(int原创 2017-08-10 19:11:01 · 965 阅读 · 10 评论 -
POJ1741Tree(树形dp/树分治)
题目大意:给一棵边带权树,问两点之间的距离小于等于K的点对有多少个。具体题解看论文。#include#include#include#includeusing namespace std;const int maxn = 21000;struct Node{ int to, w; int sum, maxn; Node *nxt;}tree[原创 2017-04-17 21:07:06 · 457 阅读 · 0 评论 -
HDU2376Average distance(树形dp|树上任意两点距离和的平均值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2376思路:引:如果暴力枚举两点再求距离是显然会超时的。转换一下思路,我们可以对每条边,求所有可能的路径经过此边的次数:设这条边两端的点数分别为A和B,那 么这条边被经过的次数就是A*B,它对总的距离和的贡献就是(A*B*此边长度)。我们把所有边的贡献求总和,再除以总路径数N*(N-原创 2017-07-21 10:57:42 · 1979 阅读 · 1 评论 -
DAG之最短路
引言:DAG:有向无环图。DAG是学习动态规划的基础,很多问题都可以直接转化为DAG上的最长路、最短路或路径计数问题。两个经典的DAG模型,嵌套矩形和硬币问题,今天先写第一个嵌套矩形问题。一、嵌套矩形第一个DAG模型:矩形嵌套问题描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a例如(1,5转载 2016-09-09 20:00:15 · 2884 阅读 · 0 评论 -
DAG上的动态规划之再次思考(QDUoj分辣条2)
https://qduoj.com/problem/99/分辣条2发布时间: 2016年7月2日 21:47 最后更新: 2016年7月2日 21:51 时间限制: 1000ms 内存限制: 128M描述啊啊有根很大的辣条,重量为n,啊啊想把辣条分给很多小朋友,但是必须满足下列条件:1.每个小朋友分得的辣条重量为a,b或c;2.分得辣条的原创 2016-09-21 19:16:48 · 656 阅读 · 0 评论