DP
文章平均质量分 72
nooooteY
这个作者很懒,什么都没留下…
展开
-
POJ 3107 Godfather
题意:一个N个节点构成的树,问删掉哪些节点使得剩下的子树的最大节点数最小。如果有多个这样的点,按升序输出。分析:简单的树形DP。设mx[u]为删掉点u后剩下的子树中最多的节点数目。则mx[u]=Max(n-sum[u],mx[v]),其中v为点u的儿子节点。(此题用vector会超时= =)Code:#include #include #include #in原创 2013-09-13 15:09:08 · 805 阅读 · 0 评论 -
HDU 4293 Groups
题意:N个人沿着一条路一起去食堂,其中有些人排成一排,每个人报出两个数ai,bi,分别指他前面有多少人后面有多少人(和他一排的人不算在前面或后面),但有些人可能会说错,问最好的情况下最多有多少人说对。分析:每个人报出两个数ai,bi,则该人就在区间[ai+1,n-bi]中,设sec[i][j]指区间[i,j]中说对的最多人数,dp[i]指以第i个人结尾的说对的最多人数,则dp[i]=m原创 2013-08-08 16:35:14 · 734 阅读 · 0 评论 -
POJ 2096 Collecting Bugs
dp求期望的题。 题意:一个软件有s个子系统,会产生n种bug。 某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中。 求找到所有的n种bug,且每个子系统都找到bug,这样所要的天数的期望。 需要注意的是:bug的数量是无穷大的,所以发现一个bug,出现在某个子系统的概率是1/s, 属于某种类型的概率是1/n。 解原创 2013-08-07 21:17:38 · 983 阅读 · 0 评论 -
ural 1036 Lucky tickets
翻译来自:NOCOW描述给你一个数字N(1[编辑]输入格式两个隔开的整数:N和S。这里的S是数码之和(S[编辑]输出格式幸运票数。[编辑]样例输入2 2[编辑]样例输出4在上面的例子中,门票是0101,0110,1001,1010,分析:DP+高精度。Code:#include原创 2013-08-06 21:19:31 · 1102 阅读 · 0 评论 -
ural 1029. Ministry
翻译来自NOCOW描述Mr. F. 想让部长批阅签署一份文件。但只有当部长的下属部门核准后,部长才签署一份文件。部门是一座M层的建筑物,从地面开始数起为1到M层。1条件a:该官员在第一层工作。条件b:该文件已经被楼下同一间房的官员签署。条件c:该文件已经被隔壁的官员签署(所谓隔壁,是指同一层,且房间号相差为1。)每一个官员签署一份文件,收取一点费用,原创 2013-08-06 16:26:01 · 847 阅读 · 0 评论 -
ural 1012. K-based Numbers. Version 2
题意:问K进制的N位数中没有连续的0的数的个数。 2 ≤ K ≤ 10; N ≥ 2; N + K ≤ 180.分析:和1009方法一样,但要用高精度计算加,乘。Code:#include #include #include #include #include #include #include #include #include #inclu原创 2013-08-06 10:07:53 · 1078 阅读 · 0 评论 -
POJ 2923 Relocation
分析转自:http://blog.csdn.net/woshi250hua/article/details/7636061题目大意:给定n个物品和两辆车的最大运载量,每次两辆车都要同时开动,问最少开几次能把所有物品运走,1解题思路:好题,解法为状态压缩DP+背包,我的状态压缩DP做的特别少,所有在看到本题的n的范围时还没能很敏感地往状态压缩方面想。本题的解题思路是先枚举选择原创 2013-08-04 16:01:45 · 783 阅读 · 0 评论 -
SGU 223 Little Kings
题意:一个N*N的棋盘,放置M个国王,使得M个国王不能相互攻击,国王的攻击范围为与自己相邻的八个位置。问有多少放置方法。分析:状态压缩DP。与POJ 1185 炮兵阵地 相似。但与之不同的是这里没有地形的限制,且当前行的状态只与前一行的状态和当前行之前所放置的国王总数有关。因此可以将这两种限制因素作为DP的状态。状态转移方程:dp[i][j][s1]=sum(dp[i-1][nm][原创 2013-07-29 15:50:29 · 1027 阅读 · 0 评论 -
ZOJ 3471 Most Powerful
题意:N个原子,两两碰撞会产生一定的能量,如果i去碰撞j,产生能量power[i][j],且j会消失。如果j去碰撞i,则会产生能量power[j][i],且i消失。问N个原子相互碰撞所能产生的最大能量。分析:状态压缩DP。假设一个数,第i位表示第i个原子是否被灭掉,如果被灭掉则为1,没被灭掉为0,那么所有状态都可以用2^n范围内的数来表示。假设对于其中一个数(n=4)1 0 1原创 2013-07-28 22:10:58 · 623 阅读 · 0 评论 -
HDU 3001 Travelling
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001题意:一个人想去N个地方,且每个地方最多去两次,至少去一次。问最短的路径是多少。分析:状态压缩DP,类似于旅行商问题。但每个地方有3个状态:没去过,去过一次,去过两次。因此可以用3进制记录每个点的3种状态。而且此题只要求到达每个地方即可,并不需要回到出发点。Code:原创 2013-07-28 11:50:12 · 708 阅读 · 0 评论 -
背包小结
1.HDU 3466 Proud Merchants题意:给定n个物品和钱m,每个物品有价格p,限制钱数q,价值v,限制q的意思是你手头的前必须大等于q才能装买这个物品,问最后获得的最大价值。n分析见:http://blog.csdn.net/hrhacmer/article/details/92250752.HDU 1114 Piggy-Bank题意:给出一个储钱罐的原创 2013-07-17 11:09:20 · 891 阅读 · 0 评论 -
POJ 2288 Islands and Bridges
题意:哈密尔顿路问题。n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算:1.每一个点的权值之和2.对于图中的每一条CiCi+1,加上Vi*Vi+13.对于路径中的连续三个点:CiCi+1Ci+2,若在图中,三点构成三角形,则要加上Vi*Vi+1*Vi+2求一条汉密尔顿路可以获得的最大值,并且还要输出有多少原创 2013-07-28 19:42:56 · 604 阅读 · 0 评论 -
HDU 4050 wolf5x
分析转自here题意:走方格,每个方格有4个状态,而且是随机的,每个状态有一个概率,问走到最后步数的期望分析:如果知道每次出脚的概率,将所有状态下出脚的概率相加就是最后步数的期望,因为每次出脚都是移动一步。设:p[M][4], f[M][4]p[i][j]表示第i 个格子处于j 状态的概率, f[i][j] 表示脚落在第i 个格子处于j原创 2013-08-08 21:28:54 · 1009 阅读 · 0 评论 -
ural 1017. The Staircases
转自:http://www.cnblogs.com/skyivben/archive/2009/03/02/1401728.html1017. The StaircasesTime Limit: 1.0 secondMemory Limit: 16 MBOne curious child has a set of N little bricks (5 ≤ N ≤ 5转载 2013-08-06 13:13:07 · 910 阅读 · 0 评论 -
POJ 1170 Shopping Offers
题意:有n(n问买到所有物品的最少花多少钱。原创 2013-08-09 11:47:01 · 739 阅读 · 0 评论 -
HDU 3586 Information Disturbing
题意:N个人组成一棵树,编号1-N,其中编号为1的人为总司令,叶节点为前线士兵。点与点之间的边有一定的权值,代表砍掉这条边所要花费的代价。题目要求砍掉某些边使得所有的叶节点都无法与根节点联通,而且在满足砍掉的所有的边的和分析:状态压缩DP+二分。二分限制limit,设sum[i]为砍掉以节点i为根节点的所有叶节点的费用总和,则有if(tree[u][i].w>mid) sum[u]原创 2013-09-07 20:24:58 · 912 阅读 · 0 评论 -
HDU 2196 Computer
题意:N台计算机连成一棵树,相邻的两台计算机之间的边有一定的权值,问距每一台计算机最远的那台计算机的距离。分析:以任意一台计算机作为根(这里不妨设为1)向下搜索距每个节点的子树中的最远距离和次远距离,然后在向上搜索一次,计算出父亲节点中的最远距离,则两者之间最大的即为答案。Code:#include #include #include #include #inc原创 2013-09-07 11:27:54 · 687 阅读 · 0 评论 -
POJ 2564 Edit Step Ladders
Edit Step LaddersTime Limit: 3000MS Memory Limit: 131072KTotal Submissions: 2513 Accepted: 940DescriptionAn edit step is a transformation from one word x to anoth原创 2013-08-26 15:46:33 · 1122 阅读 · 0 评论 -
HDU 4579 Play Game
Play Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 133 Accepted Submission(s): 85Problem DescriptionAlice and Bo原创 2013-08-26 12:01:55 · 941 阅读 · 0 评论 -
ural 1081. Binary Lexicographic Sequence
翻译及分析转自NOCOWDiscription定义:序列只包含0,1元素,有一定长度N(0 [编辑]Input Format输入包含2个正整数N,K[编辑]Output Format输出找到的序列,如果K大于合法的序列数,则输出-1Solution From Xcheng:递推。首先,计原创 2013-08-11 09:52:31 · 801 阅读 · 0 评论 -
ural 1658. Sum of Digits
题意:给出一个数(小于等于100位)的每一位数字的和(s1)与每一位数字的平方和(s2),求出符合这个条件的最小数。分析:一个数的每一位的和无论位置如何变化,它的每位数字之和与数字平方和是一定的所以我们只要使数字的位数达到最短即可。易得s1,s2的范围为900,8100。设dp[i][j]为每位数字的和为i,平方为j的最短长度,则dp[i][j]=min(dp[i-k][j-k*k]+原创 2013-08-10 21:47:40 · 875 阅读 · 0 评论 -
Codeforce C. Barcode
C. Barcodetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou've got an n × m pixel picture. Each pixel ca原创 2013-08-10 14:08:38 · 1117 阅读 · 0 评论 -
ural 1078. Segments
翻译来自NOCOWDiscription一条线上有许多节,每一节都给定了其两端的坐标。这些节都编了从1-N的号码(n[编辑]Input Format第一行包括一个整数N,以下有N行,每行上有两个整数,他们是相应节左和右两端的坐标,这些坐标是在(-10000,10000)之间的整数。假设所给定的节是按照他们输入位置编号的。[编辑]Output Fo原创 2013-08-10 17:57:21 · 867 阅读 · 0 评论 -
POJ 3406 Ant Counting
题意:T个家族的蚂蚁一共有A只,每个家族的蚂蚁编号分别为1,2...T,这些蚂蚁中的若干个组成一群去觅食,问这一群蚂蚁的数量在s到b之间的方案数一共有多少。分析:设f[i][j]为前i种蚂蚁一共j只组成的方案数。则f[i][j]=sigma(f[i-1][j-0],f[i-1][j-1]...f[i-1][j-g[i]])。g[i]指编号为i种类的蚂蚁的数量。滚动数组以节约空间。原创 2013-08-09 21:19:33 · 797 阅读 · 0 评论 -
ZOJ 3329 One Person Game
题意:有三个骰子,分别有k1,k2,k3个面。每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。当分数大于n时结束。求游戏的期望步数。初始分数为0分析:本题通过代换系数,化简后求系数。一般形成环的用高斯消元法求解。但是此题都是和dp[0]相关。所有可以分离出系数。设dp[i]表示达到i分时到达目标状态的期望,pk为投掷k分的概率,p0为回到0的概率原创 2013-08-08 11:01:53 · 680 阅读 · 0 评论 -
HDU 4336 Card Collector
题意:一种儿童食品,每包这种食品中可能会有一张卡片,且卡片一共有N种,而且每种卡片出现在一包这种食品中的概率不同,分别为p1,p2...pn。问集齐这N种卡片要买的食品的期望数量是多少。分析:概率DP+状态压缩。因为每种卡片出现在一包中的概率不是相等的,所以当计算集齐i种卡片时,要知道是那些已经收集到而哪些没有收集到,所以可以用状态压缩DP来解决。设dp[s]为收集卡片种类集合为s原创 2013-08-08 13:41:05 · 811 阅读 · 0 评论 -
HDU 4284 Travel
题意:一个人想要去A国旅行。A国一共有N个城市,M条路连接着N个城市,且经过这M条路要花费一定的钱。其中有H个城市一定要去,由于没有足够的钱,他必须在这H个城市打工,但在打工之前他必须花C数量的钱去买工作证,然后才能工作赚D数量的钱。问他从1城市出发,携带MON数量的钱,能否游览完他要去的H个城市然后回到1城市。分析:类似于旅行商问题。状态压缩DP。先用floyd求一下任意两点之间的最原创 2013-08-01 10:01:34 · 676 阅读 · 0 评论 -
HDU 3535 AreYouBusy
转自:http://www.cnblogs.com/jackge/archive/2013/04/22/3036374.html链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535经典混合背包 题目给了很多类别的物品。用 数组dp[i][j],表示第i组,时间为j时的快乐值。每得到一组工作就进行一次DP,所以dp[i]为第i原创 2013-07-03 21:15:34 · 928 阅读 · 0 评论 -
HDU 3033 I love sneakers!
题意:有S款运动鞋,一个n件,总钱数为m,求不超过总钱数且每款鞋子至少买一双的情况下,使价值最大。如果 有一款买不到,就输出“Impossible"。分析:分组背包。这个题的关键还是在于初始化,如果我们一开始把dp初始化为0,则当所有鞋子的价值都是0时,我们就无法区分是买不全那几款鞋子还是能买全但最大价值是0;因此,要把S!=0的dp[S][j]初始化为-1,便于区分。 这是一个带原创 2013-07-03 09:46:15 · 1181 阅读 · 2 评论 -
动态规划推荐题目(持续更新)
一.基础DP(无需进行特别优化)1.POJ 1745 Divisibility2.POJ 1837 Balance3.POJ 1088 滑雪4.HDU 2845 Beans5.POJ 1050 To the Max 二.进阶DP(需要进行必要优化) (单调队列优化)1.HDU 3401 Trade2.UESTC 1685 我要长高3.POJ 1821原创 2013-03-16 23:12:24 · 1085 阅读 · 0 评论 -
单调队列优化DP
最近做了一些单调队列优化DP的题目,现在总结一下。遇到这类题目首先要能够想出朴素的DP状态转移方程,然后对其进行相应的转化,对于已知的部分用单调队列来维护。以下附几道题目,部分题解摘自别人的解题报告。(自己懒的写啦。其实是我觉得别人写的比我好T_T) HDU 3401 Trade http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意原创 2013-04-12 11:07:10 · 2207 阅读 · 0 评论 -
HDU 1158 Employment Planning
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158题意:一个工厂每个月要雇佣一定数量的工人工作,每人每月都有一定的工资,且雇佣和辞退工人都要花费hire和fire数量的钱。问怎样安排工人使m个月的开销最少。分析:DP。dp[i][i]表示前i个月雇佣j个工人的最小花费。 Source Code:#include#include原创 2013-04-06 10:39:05 · 845 阅读 · 0 评论 -
HDU 1421 搬寝室
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421题意:不解释。。。分析:DP。要是左右手的质量差最小,可以想到排下序,然后就很容易想到状态转移方程:dp[i][j]=min(dp[i-1][j],d[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]));d[i][j]是前i个物品取j对的最下平方差。显然对于j*2=i原创 2013-04-02 22:44:29 · 715 阅读 · 0 评论 -
HDU 2844 Coins
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844题意:Hibix要买一个最多要花费M的手表,但具体多少钱不知道。但他有n种硬币,价值分别为A1,A2...An,且分别有C1,C2...Cn个。问用这些硬币可以凑够钱数的种类。分析:多重背包。注意初始化就可以了。 Source Code:#include #include#in原创 2013-03-31 16:56:20 · 813 阅读 · 0 评论 -
HDU 2159 FATE
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159题意:不解释。。。分析:二维完全背包。背包容量:忍耐度M和杀怪数S,背包价值:杀怪经验。状态转移方程:f[j][k]=max(f[j-1][k-cost[i]]+w[i],f[i][j]),f[j][k]指对第i种怪进行完全背包,这里要注意j,k要从小到大进行。 Source Code原创 2013-03-31 10:56:10 · 680 阅读 · 0 评论 -
POJ 1745 Divisibility
链接:http://poj.org/problem?id=1745题意:给定N个数,问进行加减运算之后的结果是否能被K整除。 分析:DP。设布尔型数组dp[][],dp[i][j]表示对前i个数进行加减运算的结果模K的值为j。共N个阶段,每个阶段K个状态。状态转移方程为:if(dp[i-1][j]) dp[i][abs(j+num[i])%k]=true;原创 2013-03-16 22:59:26 · 827 阅读 · 0 评论 -
POJ 1837 Balance
转自:http://blog.csdn.net/lyy289065406/article/details/6648094?reload 题目大意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。其中可以把天枰看做一个以x轴0点作为平衡点的横轴输入:2 4 //C 钩子数 与 G钩码数-2 3 //负数:左转载 2013-03-16 20:10:48 · 912 阅读 · 0 评论 -
POJ 1088 滑雪
分析:记忆化搜索DP。dp[i][j]表示从上下左右四点中滑到该点的最长路程,则dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i+1][j],dp[i][j+1])+1; source code: #include#include#define INF 0x3f3f3f3f#define M 105int X[]={-1,1,0,0},Y[]原创 2013-03-14 18:54:53 · 986 阅读 · 0 评论 -
HDU 2845 Beans
题意:一个矩阵,每个格子里有一定数量的豆子。若在x[i][j]位置取豆子,则x[i][j-1],x[i][j+1]和i-1行,i+1行都无法取。问能取得的豆子的最大数量。分析:DP。由于m,n的大小范围未知,所以可以先对每行求取得的最大数量,即把二维压缩为一维,再用同样的方法求最大数即可。设dp[i]为前i个格子中且以第i个格子里的豆子为结尾的最大数量。则对于一维,状态转移方程为:dp[i]=原创 2013-03-12 23:09:40 · 699 阅读 · 0 评论 -
Mysterious Present Codeforces Beta Round #4 (Div. 2 )problem D
题意:Peter想做一个东西送给朋友作为生日礼物。他有N个信封每个信封都有一定的长(h)和宽(w),而且每个信封都有一个编号(从1到N)。他用这些信封做成一个链,要求这个链中的第i个信封的长和宽要严格大于第i-1个信封的长和宽。而且他要在每个信封里装一个长宽分别为H,W的贺卡,当然链中的每个信封的长宽都要严格大于贺卡的长和宽才能装进去(贺卡不允许折叠)。问这个链的最大长度为多少?并输出这个链上的每原创 2013-07-18 13:27:21 · 926 阅读 · 0 评论