
DP“习题集”
文章平均质量分 83
一个菜鸟ACMer的DP训练记录
lin375691011
呵呵
展开
-
Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present
最长上升子序列,这种水题还是一眼就能看出来的。题目大意:主人公想在一张w*h的明信片外套信封。他有n个信封,每个信封的长宽给出,问最多能套多少层。给出从小到大的顺序。解题思路:最长上升子序列,只不过是记忆路径。下面是代码:#include #include #include #include #include #includ原创 2014-11-29 14:44:39 · 4494 阅读 · 0 评论 -
Codeforces Beta Round #2 B. The least round way
这个2B题还好~~题目大意:给出一个矩阵,从左上走到右下,只能往右或下走。路径中每个格子有一个数,这些数相乘得出一个数。求这个数末尾零最少的一条路径。解题思路:找出一条路径,乘积得数中素因子2的个数最少,再找出一个素因子5最少, 比较两个输出最小的。有意外情况就是有数为零。这种情况把零当成10跑一遍,如果素因子最少为0,输出路径,如果不是,输出经过零原创 2014-11-01 12:20:10 · 5029 阅读 · 0 评论 -
POJ 3071 Football
概率DP啊~~ 题目大意:有2^n个球队,每两个球队之间的获胜概率已经给出,问最后谁最有可能获胜。解题思路:dp[i][j]代表第i支球队大道第j场能获胜的概率。下面是代码:#include #include #include #include #include #include #include #include #in原创 2014-08-07 21:04:08 · 6286 阅读 · 0 评论 -
POJ 2486 Apple Tree
题目大意:一棵树上每一个节点都有几个苹果。问在根节点出发,走不大于K步的情况下最多能取多少个苹果。解题思路:树形DP,对于每一个子树的根节点src,都有dp[src][i][0],表示从src走i步可以回到src最多能够得到多少苹果。dp[src][i][1]表示从src走i步没有回到src最多能够得到多少苹果。状态有三种转移方式:1、用i-j-2步走其他子树回到根节点原创 2014-06-21 10:07:35 · 4572 阅读 · 0 评论 -
POJ 1947 Rebuilding Roads
树状DP第二题,这个题真的好复杂~~题目大意:有一个n个结点的树,问至少去掉几条边可以产生一个有p个节点的子树。解题思路:dp[i][j]表示以i号节点为根的子树,当有j个结点时最少需要去掉几条边。初始化:当只有1个节点时,一定是连接它到孩子结点的所有边都去掉。设某一孩子结点标号为v 则dp[i][j]=min(dp[i][j],dp[i][j-t]+dp原创 2014-06-20 15:57:33 · 4900 阅读 · 0 评论 -
POJ 2057 The Lost House
树形DP的第一题,看了好几天才明白....题目大意:有一只蜗牛爬上某个树枝末睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这只蜗牛要求寻找它的房子,它又得从树根开始爬起去找房子。现在要求一条路径使得其找到房子所要爬行的期望距离最小。解题思路:影响期望的因素有树的结构,分支节点上是否有虫子,蜗牛走的路线。对于任意一棵子树来说树的结构,分支节点上是否原创 2014-06-16 21:44:15 · 4421 阅读 · 0 评论 -
POJ 1185 炮兵阵地
又是中文题,大家都说是水题,但是说好的1A呢?题目大意:给出n*m的矩阵,当某个单元格有炮兵部队时它的上下左右两格(不包括斜着的方向)是这支部队的攻击范围。问在两支部队之间不可能相互攻击到的情况下,最多能部署多少炮兵部队。解题思路:状态压缩DP,DP[i][j][k]代表当第i行是第j种状态时,第i-1行是第k种状态时,布置炮兵的最大数量。状态可以预先处理出来,只有60种。原创 2014-06-12 10:57:41 · 5496 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream
今天感觉很不错啊,一上来就A了这道题。这可是卡了四天的啊~~题目大意:给出n×m的矩形,问用1×2的矩形完全覆盖有多少种方案。解题思路:状态压缩DP和状态压缩记忆化搜索都行:前者是从第一行的状态开始向下推到终止状态;后者是从终止状态开始搜索,并保存中间状态。我用的是状态压缩DP写的,可以提前与处理一下状态与状态之间的关系。下面是代码:#i原创 2014-06-11 10:33:13 · 4585 阅读 · 0 评论 -
POJ 3254 Corn Fields
题目大意:FJ有一块n*m矩形农场,他知道每一个格子能不能种牧草。他想把一些格子种上牧草,但要求没有两个种牧草的各自是相邻的。求一共有多少种种法。解题思路:状态压缩:将每一行有几个格子种牧草用一个数来表示状态。判断有没有相邻用x&(x下面是代码:#include #include #include #include #include using nam原创 2014-06-06 20:08:36 · 4502 阅读 · 0 评论 -
POJ 3034 Whac-a-Mole
题目大意:打地鼠游戏,n*n的矩阵,每一个整数点(x,y)都有一个鼠洞,某个老鼠在某个鼠洞出现的时间只有一秒。游戏者拿着锤子,锤子可以在任意一个整数点上(不一定在矩阵内)。游戏者每一秒可以将锤子从当前位置直线移动到下一位置(整数点)。两位置之间的距离不超过d。移动的直线路径穿过的(过整数点中心的)鼠洞如果有老鼠,都会被打晕。例如(0,0)移动到(0,3)。如果(0,1),(0,2)有老鼠出原创 2014-06-03 21:37:51 · 7659 阅读 · 0 评论 -
POJ 1925 Spiderman
题目大意:给出n个建筑,每个建筑以两个数x,y表示,x代表它在横轴上的位置,y代表这个建筑的高度。所有建筑的高度都大于等于第一个建筑的高度。所有建筑输入顺序按照x,y从小到达的顺序排列。蜘蛛侠在第一个建筑上,他要去最后一个建筑救女朋友。一直他每一次摇摆都会到关于建筑对称的位置。求到最后一个建筑的最小摇摆次数。解题思路:dp[i]代表着当他到x轴i的位置时最少摇摆了几次。因为原创 2014-06-02 21:25:54 · 5091 阅读 · 0 评论 -
POJ 2948 Martian Mining
题目大意:NASA在火星发现了一个矿场矩阵。矩阵中的每个单元格都有两种矿Yeyenum和Bloggium。我们知道每个单元格中这两种矿的数量。NASA决定在北边建造Bloggium的矿石精炼厂,在西边建造Yeyenum的矿石精炼厂。于是需要我们把bloggium矿石向北运(行号等于0的方向),把Yeyenum矿石向西运(列号等于0的方向)。但由于矿石的不稳定在建造传送带时有特殊要求。求建造传送原创 2014-05-29 15:08:00 · 4669 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome
题目大意:给出一个字符串,求将它原创 2014-05-28 10:13:06 · 4573 阅读 · 0 评论 -
POJ 1191 棋盘分割
刷了这么长时间POJ了 可算看到了一个中文题,不容易啊~~。题目大意:自己看。解题思路:dp[x1][y1][x2][y2][num]代表从(x1,y1)到(x2,y2)分成num+1块最小的平方和是多少。下面是代码:#include #include #include int sum[10][10],board[10][10];d原创 2014-05-21 21:08:58 · 4149 阅读 · 0 评论 -
2014百度之星资格赛第四题
LabyrinthTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2911 Accepted Submission(s): 1007Problem Description度度熊是一只喜欢探险的熊,一次偶原创 2014-05-20 09:44:15 · 5496 阅读 · 0 评论 -
2014百度之星资格赛第二题
Disk ScheduleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2560 Accepted Submission(s): 366Problem Description有很多从磁盘读取数据的需求原创 2014-05-20 09:21:57 · 20928 阅读 · 0 评论 -
POJ 3373 Changing Digits
题目大意:给出一个数n,求m,使得m的长度和n相等,能被k整除。有多个数符合条件输出与n在每位数字上改变次数最小的。改变次数相同的输出大小最小的。 共有三种解法:DP解法,记忆化搜索和DFS+强剪枝的算法。后两种以后会更新。1、DP解法:解题思路:DP[i][j]表示数n的前i位除以k余j最小改变几位。DP[len][0]就表示数n被k整除最小改变几位。根据这个原创 2014-05-16 08:25:40 · 4921 阅读 · 0 评论 -
POJ 2750 Potted Flower
线段树第五题,有一点动态规划的意思。代码量较大。手残残到死啊~~题目大意:给一个整数序列编号1~n,n和1相邻。每次更新一个位置上的数,问更新完后区间最大和是多少。注意这个区间不能包括全部的数字。解题思路:1、在求区间最大和的时候,在这里只有两种情况:(1)、不同时包括数字1和数字n,只需要求区间的最大和就行了。(2)、同时包括数字1和数字n,这时候需要求区间的原创 2014-02-26 08:16:04 · 189577 阅读 · 3 评论 -
POJ 1159 Palindrome
题目大意:给出一个字符串,问添加多少个字符才可以使这个字符串成为回文串。解题办法:将字符串逆序,同原串进行最长公共子序列处理,串的长度减去最长子序的长度就是题解。注意:这个题对内存的控制十分严格,5000*5000 int型数组是开不开的,可以开short型,也可以借这个题练习一下滚动数组。下面是代码:#include int max(int a,int b){原创 2013-10-22 08:28:42 · 4167 阅读 · 0 评论 -
POJ 1080 Human Gene Functions
最长公共子串的变形题。要初始化第一行第一列。下面是代码:#include int max(int a,int b,int c){ if(a<b) { a=b; } if(a<c) { a=c; } return a;}int find(char c1,char c2){ if(原创 2013-10-21 21:54:55 · 4217 阅读 · 0 评论 -
POJ 3176 Cow Bowling
我勒个擦,这是老天因为我卡了六天过了给的奖励么??数字三角形问题,又是一个经典题,不多说。下面是代码:#include int a[355][355];int main(){ int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=i;j++) {原创 2013-09-12 20:46:40 · 4184 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence
最长上升子序列,最最经典点的DP题。注意在这个题中要求是严格上升!!!下面是代码:#includeint main(){ int n,a[1005],dp[1005]; scanf("%d",&n); int i,m,j,max1=1; for(i=0; i<n; i++) { scanf("%d",&a[i]);原创 2013-09-12 20:41:21 · 3845 阅读 · 0 评论 -
POJ 1260 Pearls
DP真的是太不擅长了!!!这道题的关键就是:1、购买的珠宝数量是一定的。2、完全按照输入顺序来操作,否则会出错。3、如果a、b、c三种珠宝 ,a能被b替代,b能被c替代,则a一定能被c替代。所以我们找的是一个个不互相重叠的替代区间,及在某一区间内的珠宝都被此区间的最后一种珠宝替代。下面是代码:#include int minm(int a,int b){原创 2013-09-12 20:19:10 · 3947 阅读 · 0 评论 -
POJ 1836 Alignment
题目大意:给定一排人的身高,求踢出最少的人可以使队列身高如下形状:(感谢大神提供图片)这个题比较简单,顺序一遍最长上升子序列,逆序一遍最长上升子序列,最后处理一下数据就行。下面是代码:#include #include const int MAX=1005;int main(){ int n,dpl[MAX],dpr[MAX]; double h原创 2013-09-05 14:44:10 · 4105 阅读 · 0 评论 -
POJ 1276 Cash Machine
开学了,好长时间没写博客了哈,来个DP练练手吧。。。(瞬间霸气测漏啊!!)题目大意:给定金额,钞票种类,钞票数目。求能找开的不大于金额且与金额差最小的值。这是一个多重背包问题,可以优化成01背包二进制(感谢背包九讲!!)。下面是代码:#include struct node{ int x,y;} mon[15];const int inf=-1<<30;int原创 2013-09-04 20:11:54 · 3893 阅读 · 0 评论 -
POJ 1837 Balance
题目大意:有一个天平上有C个挂钩,分别在不同的位置上,用C个整数表示。正整数代表在原点右侧,负整数代表在左侧,就相当于一个数轴。有G个砝码,求有多少种平衡情况。思路:这是一个01背包问题。每勾上一个砝码就是一个新阶段。每一个新阶段都是在原来的出现过的状态上更新的。状态方程dp [ i ][ j+ w[ i ]*c[ k ] ]= ∑(dp[ i-1 ][ j ] );原创 2013-08-22 16:38:36 · 3769 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon
这是个DP题,很简单。题目大意:给定一个字符串和N个单词,要求从字符串中去掉最少的字符后能够被这些单词表示。直接贴代码:#include #include const int M = 605;int len[M],dp[305],l,w;char dic[M][30],s[305];void DP(){ int i,j,k; dp[0]=1; f原创 2013-08-12 18:22:18 · 4148 阅读 · 0 评论