![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划----------
文章平均质量分 73
sprite_
这个作者很懒,什么都没留下…
展开
-
zjnu1745 DOMINE(状压dp)
题目链接:http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1745题目大意:在n*3的矩阵里面放置K个1*2的砖块,问砖块覆盖的位置的最大的价值的和。范围:n思路:因为是只有3列,所以可以每一行上面只有最多8种状态。所以我们可以按照行来进行dp,设dp[i][j][k]表示前i行覆盖j个砖块,当前行原创 2016-03-28 16:04:32 · 381 阅读 · 0 评论 -
hdu5464 Clarke and problem(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5464题目大意:给n个数,取部分数求和(可以一个都不选),看和能不能被p整除,计算出这样的方案数。思路:跟上次的那题很像,上次的一题是求和有没有被整除的。具体链接在这里:http:这题明显不能暴力了,可以用dp,dp[i][j]代表在前i个数中求和取模得到j的方案数。原创 2015-09-22 14:17:14 · 421 阅读 · 0 评论 -
zjnu 1181 石子合并(区间DP)
Description在操场上沿一直线排列着 n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分。允许在第一次合并前对调一次相邻两堆石子的次序。 计算在上述条件下将n堆石子合并成一堆的最小得分。 Input输入数据共有二行,其中,第1行是石子堆数n≤100; 第2行是顺序排列的各堆石子数原创 2015-07-16 10:17:23 · 1116 阅读 · 0 评论 -
hdu2639 Bone Collector II(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639题目大意:求出背包里面第k大的价值。思路:如果是求最大价值,可以直接利用01背包求得,此时状态方程为dp[j]=max(dp[j],dp[j-w[i]]+v[i])。现在是求第k大的,显然不能直接套用了,但还是利用背包,只是这时就要加一维来限制条件了。我可以设一个d原创 2015-09-24 10:14:42 · 412 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(分组背包)
ACboy needs your helpTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4903 Accepted Submission(s): 2646Problem DescriptionACboy ha原创 2015-07-16 10:26:53 · 669 阅读 · 0 评论 -
hdu 3033 I love sneakers! (分组背包)
I love sneakers!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4460 Accepted Submission(s): 1821Problem DescriptionAfter months原创 2015-07-17 11:57:45 · 645 阅读 · 0 评论 -
hdu1059 Dividing(多重背包+二进制优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059题目大意:有价值分别为1~6的弹珠,不同价值的弹珠有不同的数量。两个人要分成相同的价值,问能不能分成功。思路:典型的多重背包。加上二进制优化。代码:#include#includeint max(int a,int b){ if(a>b)return a;原创 2015-09-18 11:05:11 · 1922 阅读 · 0 评论 -
hdu2844 Coins(多重背包+二进制优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844题目大意:有n种价值不同的硬币,他们的数量有限但不相同。现在要求出硬币组合,可组合出多少种不同价格。思路:第一反应是母函数,不过数据量有点大,没敢尝试。可以用背包。通过多重背包,dp[i]就代表价格为i时的最大组合价格。如果dp[i]==i,表明能够组合出这个价格,否则原创 2015-09-18 14:10:08 · 1659 阅读 · 0 评论 -
hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191题目大意:中文题。思路:简单的多重背包。代码:#include#include#include#include#includeusing namespace std;int max(int a,int b){ if(a>b)return a;原创 2015-09-18 15:50:50 · 783 阅读 · 0 评论 -
hdu2159 FATE(二维背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159题目大意:中文题。思路:完全背包。但是他有两个限制条件,所以考虑用二维费用的背包。dp[u][v],u,v分别代表两个不同的限制条件。如果对于第i个物品,条件1和条件2所需的代价为a[i]和b[i]。那么就有 dp[i][u][v]=max(dp[i-1][u][v原创 2015-09-18 21:34:42 · 494 阅读 · 0 评论 -
codeforces 577B Modulo Sum(DP||set)
题目链接:http://codeforces.com/problemset/problem/577/B题目大意:给n个数,问他们之中的某些和能不能被m整除。思路:当n>m时,根据鸽巢原理,可以判断一定为YES。因为对于这些数,取模以后的范围为(0,m-1),那么当到第m+1个时候,至少这个取模后的数与前面中的一个有重复,此时肯定有两个相加能被m整除。当n代码:#原创 2015-09-21 20:01:11 · 476 阅读 · 0 评论 -
2015 南阳CCPC hdu5543 Pick The Sticks(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543题目大意:在一个狭长的容器里面放一些长木棍,每根木棍的长度和价值都不同,现在通过放置木棍使得能够得到的总价值最大。木棍放置不能重叠,对于任意一根木棍,只要他的重心落在容器里面,就算有一部分出去了,也算能够放下。题目范围:N思路:对于这样一个问题,如果范围小的话,我们大可原创 2015-11-13 10:48:48 · 971 阅读 · 0 评论 -
hdu 5501 The Highest Mark(变形01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5501题目大意:有n道题目,每道题目初始时候都有一个价值,如果在x分钟后做出这道题目,那么得到的分数就会减少x*b[i],而做一道题目所花的时间c[i]也不同。现在问在限定的时间里面,怎么样做题目能够获得最大的价值。思路:题目要求获得最大的价值,但是解决一道题目的价值随着时间的变原创 2015-10-13 21:09:59 · 557 阅读 · 0 评论 -
poj 2411 Mondriaan's Dream 铺砖块(状压dp)
题目链接:http://poj.org/problem?id=2411题目大意:有n*m的矩形,现在要往上面铺1*2的小砖块。问能否被铺满,如果能输出铺满的方案数。范围:n,m思路:状压dp。令铺的地方为1,不铺的地方为0。那么要铺满就需要整个矩形都是1。砖块共有3种铺法:1、横着铺,这样的情况就是第j列和第j+1列都为1。2、竖着铺,这样的情况就是原创 2016-03-23 21:19:21 · 1572 阅读 · 0 评论 -
poj 1185 炮兵阵地(状压dp)
题目链接:http://poj.org/problem?id=1185题目大意:中文题。范围:N 思路:状压dp。还是将炮兵摆放的地方设1,不放的地方设0。因为他对炮兵的攻击范围做了要求,也就是相邻的炮兵位置不能小于2。那么我们就要先筛选出满足这个硬性条件的状态。然后我们可以发现,对于第i行的状态,与上一行以及上上一行有关。所以考虑设一个三维dp原创 2016-03-23 21:05:46 · 412 阅读 · 0 评论 -
codeforces #343 div2 D. Babaei and Birthday Cake(DP+离散化+线段树优化)
题目链接:http://codeforces.com/contest/629/problem/D题目大意:给n个圆柱体蛋糕,现在要堆一个大蛋糕,要求体积大的放在上面同时编号大的不能放在编号小的下面。问最大的体积是多少。范围;n思路:很容易想到:dp[i]=dp[j]+a[i](i>j&&a[i]>a[j])。所以就有了O(n^2)的算法,但是范围太大,会超时。原创 2016-02-27 19:00:24 · 559 阅读 · 0 评论 -
poj3254 Corn Fields(状压dp)
题目链接:http://poj.org/problem?id=3254题目大意:给m*n的玉米地,里面可以放牧,1的位置可以放牧,0的位置不行。相邻的位置不能放牧。问一共有多少种放牧的方法。范围:n,m思路:状压dp。可以为每一个行记录一个状态dp[i][state],表示在第i行的状态state是否满足。所以在当前的第i行,我们可以通过判断各个状态是否与前原创 2016-03-23 15:18:43 · 519 阅读 · 0 评论 -
Codeforces #341 div 2 E. Wet Shark and Blocks(矩阵快速幂)
题目链接:http://codeforces.com/contest/621/problem/E题目大意:给b个block,每个block有n个数,现在从每个block里面选一个数然后首尾串起来组成一个新的数,对这个数取模x以后,问结果等于k的种类数。范围:2 ≤ n ≤ 50 000, 1 ≤ b ≤ 109, 0 ≤ k x ≤ 100, x ≥ 2思路:首原创 2016-02-25 21:48:25 · 520 阅读 · 0 评论 -
hdu5569 matrix(简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569思路:直接dp遍历过去即可,设f[i][j]代表走到(i,j)时候的最小价值。当走奇数步的时候不进行决策,走偶数步的时候看从哪里走过来价值小。代码:#include#includeint min(int a,int b){ return a<b?a:b;}原创 2015-11-25 18:50:09 · 480 阅读 · 0 评论 -
hdu5568 sequence2(dp+大数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5568题目大意:给一段长度为n的序列,现在在其中取k个,问这k个是递增的取法有多少种。范围:n思路:可以用dp来解决,跟前面做过的一题一样。设f[i][j],代表在前i个里面选了长度为j并且以a[i]为结尾的取法,那么就有转移方程:f[i][j]=Σf[k][j-1](a原创 2015-11-25 18:46:16 · 599 阅读 · 0 评论 -
2015 南阳 CCPC hdu 5542 The Battle of Chibi(DP+树状数组优化+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542题目大意:给一段长为n的序列,现在要找出m个严格递增的数,问这样的找法有多少种。范围 :n思路:首先会往dp方面想,我们令f[i][j]表示前i个数字里面取了j个严格递增的数的找法。但是为了严格递增,我们可以规定这个f[i][j]的最后那个数就是a[i]。此时我原创 2015-11-18 20:09:37 · 782 阅读 · 0 评论 -
zjnu 1275 最大的算式(Bigexp)(区间DP)
题目链接:http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1275思路:典型的区间DP。因为数据范围比较小,所以就开了3维。设dp[i][j][k]为i~j区间上添加了k个乘号的最大值。那么就有转移方程:dp[i][j][k]=max(dp[i][l][m]+dp[l+1][j][k-m],dp[i][原创 2015-10-28 21:14:18 · 646 阅读 · 0 评论 -
hdu2955 Robberies(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955题目大意:有个人要去抢劫银行,在这之前他对自己抢劫的行为进行了风险估计,抢不同的银行获得的前不同风险也不同。抢银行时他有一个最高风险的上限,现在问在不超过最高风险的情况下(不被抓),他最多能抢多少钱。思路:题目给了两个变量,风险指数和价值,很容易想到就是01背包。如果我原创 2015-09-24 16:21:00 · 376 阅读 · 0 评论 -
hdu1203 I NEED A OFFER!(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203题目大意:中文题。思路:有上一题做铺垫,这题就简单多了。计算花费为j时最小的被拒绝的概率P,最后答案就是1-P,表示最大的被接受的概率。代码:#include#includedouble min(double a,double b){ if(a<b)retu原创 2015-09-24 16:30:04 · 82 阅读 · 0 评论 -
LightOJ 1422 Halloween Costumes(区间DP )
DescriptionGappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is planning to attend as many parties as he can. Since it's Halloween, these parties are all cos原创 2015-10-19 20:59:14 · 421 阅读 · 0 评论 -
zjnu 1186 乘积最大(区间DP)
题目链接:http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1186思路:区间DP。dp[i][j]表示前i个数字里面有j个乘号的时候的最大值。那么就有dp[i][j]=max(dp[k][j-1]*x),这里1代码:#include#include#define ll __int64ll max(l原创 2015-10-19 20:49:00 · 516 阅读 · 0 评论 -
hdu5492 Find a path(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5492思路:可以将所求的式子展开,展开后变为(n+m-1)*x1-x2。x1是序列A的平方和,x2是序列A的和的平方。所以我只要找到x2相同时,x1最小的那个就行了。所以可以考虑dp[i][j][k],表示在第i行第j列的时候,序列和为k时候的x1的最小值。k的值最大为5原创 2015-09-29 18:11:23 · 404 阅读 · 0 评论 -
hdu1176 免费馅饼(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176题目大意:中文题。思路:对于这么一个问题,考虑dp。可以令dp[i][j]为第i秒在j位置上获得的最大馅饼数量。这样就可以写出状态转移方程:dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1],dp[i-1][j+1]))+a[i][j];原创 2015-08-31 22:44:51 · 510 阅读 · 0 评论 -
hdu5375 Gray code(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375题目大意:给你一个二进制串,带’?’的位置可以由你来决定填’1’还是’0’,补充完整之后转换成格雷码表示,每一个位置都有一个权值a[i],只有格雷码为’1’的位可以加上权值,问你最终权值之和最大为多少。 格雷码表示可以百度一下,在这里可以通俗一点讲:对于这么一个串,如果i位原创 2015-08-13 20:56:40 · 661 阅读 · 0 评论 -
Hdu 1087 Super Jumping! Jumping! Jumping!(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087题目大意:在一段序列中,按照从小到大的顺序找子序列,要求得到的sum 值最大。思路:其实就是最长公共子序列。#include#include#define max(a,b) a>b?a:bint main(){ int n,i,j,k,a[1005],dp[1005],x,原创 2015-08-25 21:57:59 · 790 阅读 · 0 评论 -
hdu 1513 Palindrome(LCS)
PalindromeTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3641 Accepted Submission(s): 1252Problem DescriptionA palindrome is a s原创 2015-07-17 15:09:48 · 648 阅读 · 0 评论 -
hdu 5365+hdu 5355
5365题目链接:点击打开链接题目大意:给定一些整数点,问这些点能够组成多少个正三角形或者是正方形、正五边形、正六边形。思路:如果仔细想一想的话,这道题目是根本不存在正三角形、正五边形、正六边形的请款的。(在纸上画图看一看,可以发现确实不行。题目输入是整数点)所以题目变成:这些点能够组成多少个正方形。看数据范围,n题目瞬间简单了,暴力!暴力枚举4个点,然后判断这4个点是否能组成原创 2015-08-10 20:36:04 · 682 阅读 · 0 评论 -
hdu1078 FatMouse and Cheese(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078题目大意:题目中的k表示横向或者竖直最多可以前进的距离,不能够拐弯。老鼠的出发点是(1,1)。对于老鼠从当前点能够到达的点,筛选出从这些点到达当前点所能获得的cheese的最大值。思路:记忆化搜索。如果对于当前的点,没有被搜索过(dp[i][j]=0),那么就对原创 2015-08-24 22:14:26 · 836 阅读 · 0 评论 -
hdu5119 Happy Matt Friends( DP )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5119题目大意:在N个数里面选取一些数进行异或运算(可以一个都不取),算出异或后的答案大于等于M的方案数。思路:dp[i][j]表示前i个异或结果为j的方案数。于是就是取或者不取的问题。可以用滚动数组进行优化。#include #include #includ原创 2015-10-04 19:09:37 · 495 阅读 · 0 评论 -
poj 1651 Multiplication Puzzle(区间DP)
题目链接:http://poj.org/problem?id=1651题目大意:在一串长为n的数字里面,一个个的选数直到只剩下2个数。取数的过程中记录下分数,规定只能在两个数中间取一个数,假设这三个数是a1,a2,a3,那么分数就是a1*a2*a3。现在问怎么选数才能使总得分最低。思路:区间DP。跟矩阵连乘其实是一样的。我设dp[i][j]表示i~j区间里面取数获得原创 2015-10-21 21:04:56 · 362 阅读 · 0 评论 -
hdu 5534 Partial Tree(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534题目大意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(d),表示度为d的结点的价值是f(d)。现在问如何连能够使得Σf(d)的值最大。思路:首先我们知道n-1条边意味着有2*n-2个度,那么求这个价值最大就是对这些度的分配问题。想法很巧妙,为了解决出原创 2015-11-05 12:49:36 · 561 阅读 · 0 评论 -
hdu5074 Hatsune Miku(简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074题目大意:给一个m*m的矩阵,有n个数a[i]。然后定义score(i,j)是矩阵第i行第j列的值,i,j分别是a[i]和a[i+1]。现在给出了n个数a[i],如果a[i]是-1,那么就可以把a[i]变成1~n里面的任意一个数。现在问能得到的最大分数是多少。思路:简单的d原创 2015-10-06 21:26:29 · 794 阅读 · 1 评论 -
zjnu 1182 能量项链(区间DP)
题目链接:http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1182思路:区间DP。和石子合并其实是同一个题目。只不过要处理环的问题。对于环,我们可以采用最常用的处理方法,将环断为链。即a[1],a[2]……a[n],a[n+1](a[1]),a[n+2](a[2]),……a[2n-1](a[n-1])。然后我们原创 2015-10-20 21:16:08 · 573 阅读 · 0 评论 -
poj 1141 Brackets Sequence(区间DP记录路径)
题目链接:http://poj.org/problem?id=1141题目大意:给一个不完全匹配的括号序列,问最少需要增加多少个括号能够使括号序列完全匹配,输出完全匹配以后的序列。思路:区间DP。我们设dp[i][j]代表i~j区间里面使得括号完全匹配最少需要增加的括号数。那么如果s[i]和s[j]是匹配的,就有dp[i][j]=dp[i+1][j-1]。然后就在i原创 2015-10-23 20:39:05 · 499 阅读 · 0 评论 -
poj 2955 Brackets(括号匹配,区间DP)
题目链接:http://poj.org/problem?id=2955题目大意:给一个字符串,求出最大的括号匹配数。这里的最大匹配数可以是不连续的子串。比如([ ),就是2。思路:区间DP。如果设立一个dp[i][j],代表从i到j的括号最大匹配数。那么如果在i和j的地方,s[i]和s[j]能匹配成功,就有dp[i][j]=dp[i+1][j-1]+2。所以我们就可原创 2015-10-16 20:03:00 · 599 阅读 · 0 评论