DP
ASDFJKLDDM
这个作者很懒,什么都没留下…
展开
-
2013寒假练习 1008:Putting Apples
地址:http://acm.bit.edu.cn/mod/programming/view.php?a=494DP好题。将n个苹果分入k的盘子,盘子可以空着,问不同的方法总数(1,2,2和2,1,2算一种)建立dp[a][b],表示将a个苹果分入b个盘子的方法总数。初始条件为dp[a][0](0我们将dp[a][b]的这些方法分成两种。一种是含0的,即有盘子没放苹果的情况。这一部分情况原创 2013-02-01 23:22:02 · 435 阅读 · 0 评论 -
2013寒假练习 1011 Maximum Sum II
地址:http://acm.bit.edu.cn/mod/programming/view.php?a=497题意:子段长度不超过k的最大子段和。看似简单题,序号又靠前,结果就给虐了T T一开始妄图用和最大子段和差不多的方法做,最后才发现算法不对。正解如下:sum[i]表示前i个数之和(特别的sum[0]=0),问题转化为找一个最小的sum[j](i-k=http://yzmd原创 2013-02-18 09:18:58 · 379 阅读 · 0 评论 -
2013寒假练习 1022 Mondriaan's Dream
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=673题意:求用1*2的砖填满m*n的矩阵的方法总数,对称的也算。状态压缩DP。。由于接触的比较少是模仿别人AC代码写的。首先可以简化这道题的关键之一是可以把每一行的状态记成101000(最多11位)之类的二进制表示,其中0表示该行的这一位要么是上一行的竖块占掉的,要么是这一行横放原创 2013-02-13 18:23:23 · 405 阅读 · 0 评论 -
2013寒假练习 1021:Pascal's Travels
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=672要从一个矩阵的左上角走到右下角。矩阵的每个点都有一个值表示从该点出发的下一步必须走这个指定的距离,而且必须往右或往下走。问总的走法有几种。直接把每种方法都搜索出来会TLE。注意到特殊之处在于每一步必须往右或往下走,所以每个点的走法总数只被其左上方的点影响。所以我们可以另ans[i原创 2013-02-08 18:53:16 · 362 阅读 · 0 评论 -
2013寒假练习 1014:Big Event in BIT
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=665题意:有N种东西,每种东西有价值和数量。要把所有东西分成尽量平均的两份。一眼看出是价值和重量相等的多重背包。。背包容量是总价值/2。。久违的1Y#includeint v[55],a[55],dp[255555];int main(){ int n,i,j,k原创 2013-02-06 18:03:04 · 414 阅读 · 0 评论 -
2013寒假练习 1017:To the Max
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=668最大子矩阵和。其实就是做n*n次最大子段和。。#includeusing namespace std;int a[105][105],sum[105],dp[105];int main(){ int n,i,j,k,ans; while(~scanf("%原创 2013-02-08 00:13:38 · 360 阅读 · 0 评论 -
2013寒假练习 1015:Edit Distance
给两个字符串,将其中一个经过编辑后变成另一个所需的最短步数叫做编辑距离。,其中编辑是指:插入、删除、更改。求编辑距离。类似最大公共子串做法的DP,转移方程为dp[i][j]=max{dp[i-1][j-1]+1,dp[i-1][j]+1,dp[i-1][j]+1}(i,j位置两字符不相同)、dp[i][j]=max{dp[i-1][j-1],dp[i-1][j]+1,dp[i-1][j]+1}原创 2013-02-07 17:17:38 · 403 阅读 · 0 评论 -
2013寒假练习 1018:没有上司的聚会
地址:http://acm.bit.edu.cn/mod/programming/view.php?a=504树形DP好题。终于独立做出一道题。。题意:给出一棵树的节点的权值,取一个节点集满足没有节点有父子关系,求这个节点集总权值的最大值。由于当前节点是否取影响其父亲的DP取值,故DP时要分取和不取两种情况。状态转移方程还是比较好想的,可以参见代码。然后就是具体处理,我是用父亲表示原创 2013-02-06 17:20:13 · 913 阅读 · 2 评论 -
2013寒假练习 1016:滑雪
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=667经典DP好题。给出一个二维数组,求一个最长的下降路径。其中路径的合法性是指可以往上下左右走。用dp[a][b]表示从map[a][b]开始能走出的最长下降路径的长度,那么dp[a][b]=max{dp[X][Y]+1}其中XY位于AB的上下左右,并且有map[A][B]>map[X]原创 2013-02-04 17:28:19 · 366 阅读 · 0 评论 -
2013寒假练习 1010:Maximum Sum
地址:http://acm.bit.edu.cn/mod/programming/view.php?a=496最大子序列。。DP入门题。。可以直接在原数组上一遍输入一边跑一边更新最大值=w=WA了一次因为没注意序列长度必需至少为1#includeusing namespace std;int a[50005];int main(){ int t,n,max; sca原创 2013-02-02 14:37:08 · 366 阅读 · 0 评论 -
2013寒假练习 1013:Bone Collector
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=66401背包~WA了一次因为输入的两行写反了。。反了。。了。。今次用的是一维数组写法。#includeusing namespace std;int v[1005],r[1005],dp[1005];int main(){ int t,n,b,i,j; s原创 2013-02-04 01:18:24 · 336 阅读 · 0 评论 -
2013寒假练习 1012:导弹防御问题
地址http://acm.bit.edu.cn/mod/programming/view.php?id=663经典DP题。先求一个最大不上升子序列的长度没问题。至于第二问一共需要几个导弹。。居然是求最大上升子序列的长度,就等于至少需要几个导弹。。没想到。究其原因:设该序列最大上升子序列长度为L,并且该子序列为A1,A2,...,AL.那么一、至少要用L枚导弹,因为A1,A2...AL没有任原创 2013-02-03 18:41:36 · 374 阅读 · 0 评论 -
2013寒假练习 1019 The Little Architect II
地址:http://acm.bit.edu.cn/mod/programming/view.php?id=670用1*1*2的积木装满2*2*n的矩阵,一共有几种方法。答案mod p输出(1 这题想了我好几天,终于想明白每一层只有三种可能:不放向下的(情况0),放两个相邻的向下的(情况1),放四个向下的(情况2)。则由状态压缩DP的思想可以得到递推公式:dp[i][0]=dp[i-1]原创 2013-02-16 16:12:08 · 512 阅读 · 0 评论