动态规划
文章平均质量分 68
ConwayTian
一切再来,为时未晚。
毁掉你人生的,其实是你内心的平庸,是你失去追求卓越的那个瞬间。
展开
-
POJ 1390
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3796 Accepted: 1506 Description Some of you may have played a game called 'Blocks'. There are n bloc原创 2013-05-22 23:05:47 · 2231 阅读 · 0 评论 -
统计单词个数 (区间DP)
【问题描述】 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1 单词在给出的一个不超过6个单词的字典中。 要求输出最大的个数。 【输入文件】 去部输入数据放在文本文件input3.dat中,其格式如下: 每组的第一行有二个正整数(p,k) p表示字串的行数; k表示分为k个部分。 接原创 2012-08-06 16:45:03 · 1890 阅读 · 1 评论 -
能量项链 (区间DP,环状)
在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的原创 2012-08-05 23:46:47 · 2159 阅读 · 0 评论 -
石子合并 (区间DP)
【问题描述】 在一个操场上摆放着一行共n堆的石子。现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请编辑计算出将n堆石子合并成一堆的最小得分和将n堆石子合并成一堆的最大得分。 【输入文件】 输入第一行为n(n 【输出文件】 输出将n堆石子合并成一堆的最小得分和将n堆石子合并成一堆的最大得分。 【输入样例】 3 1 2 3原创 2012-08-05 12:27:56 · 5782 阅读 · 0 评论 -
多多看DVD(加强版)(多维DP)
【问题描述】 多多进幼儿园了,今天报名了。只有今晚可以好好放松一下了(以后上了学后会很忙)。她的叔叔决定给他买一些动画片DVD晚上看。可是爷爷规定他们只能在一定的时间段L看完。(因为叔叔还要搞NOIP不能太早陪多多看碟,而多多每天很早就困了所以只能在一定的时间段里看碟)。多多列出一张表要叔叔给她买N张DVD碟,大多都是多多爱看的动画片(福音战士,机器猫,火影忍者,樱桃小丸子……)。这N张碟编号为原创 2012-08-02 22:08:22 · 1531 阅读 · 2 评论 -
找啊找啊找GF (多维动态规划)
【问题描述】 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sqybi这种单身的菜鸟来说是多么的痛苦...虽然他听着这首叫做"找啊找啊找GF"的歌,他还是很痛苦.为了避免这种痛苦,sqybi决定要给自己找点事情干.他去找到了七夕模拟赛的负责人zmc MM,让她给自己一个出题的任务.经过几天的死缠烂打,原创 2012-08-02 20:49:49 · 2632 阅读 · 0 评论 -
小M的回文串
小M的回文串 Description 小M喜欢回文串,回文串就是从左往右和从右往左读都一样的字符串。 现在小X找到小M给了他一个字符串S,希望小M将它变成回文串。 小M可以进行如下三类操作: add 在字符串的任意位置添加一个字符erase 删除一个字符change one letter to another 将某个字符变成另一个 然而,每种操作只能对规定的字符原创 2012-08-03 12:49:27 · 1706 阅读 · 0 评论 -
1254 - lcs (n*logn)
1254 - lcs Time Limit: 3000 msMemory Limit: 65535 Kb Description This problem seems a little easy. Because the two given sequences p1 p2 are just permutations of 1~n. So try it and tell me the a原创 2011-11-02 16:54:37 · 499 阅读 · 0 评论 -
POJ 3590 The shuffle Problem 置换+DP
题意:对每一个置换T,都存在一个T^k = e。现在让你求一个n元置换,使得它的阶最大,即当T^k = e时,k最大。若同时存在多个这样的T,那么输出其中排序最小的。 题解:由于每一个置换都可以分解成若干个轮换,那么这些轮换的阶的最小公倍数就是该置换的阶。 所以题目可以变成这样:给你一个整数n,求n1+n2+n3```+ni = n。 并且n1,n2,```ni的最小公倍数最大。 1.求最小原创 2012-03-24 00:51:05 · 2281 阅读 · 0 评论 -
POJ 2404 Jogging Trails (中国邮递员问题,状态压缩DP)
题意:Gord在为一场马拉松做准备,他家后面有一个公园,公园里有许多路径,这些路径连接了水上景点(n 题解:计算出任意两点之间的路径,统计出奇度顶点,找出这些奇度顶点的最小带权匹配(貌似计算一般图的最优带权匹配不太好弄,拆点然后用KM做是不对的)。有一个算法叫做Edmonds-Johnson算法可以解决中国邮递员问题,但是我找不到具体代码。 #include using namespa原创 2011-11-11 16:28:49 · 3111 阅读 · 1 评论 -
POJ 1054 The Troublesome Frog 搜索+剪枝
题意:稻田里的青蛙沿直线跳跃,每一只青蛙的跳长一定,现在发现稻田里有许多青蛙跳过的痕迹,根据这些痕迹求跳跃次数最多的那一条路线。 题解:注意题目的要求,首先要保证青蛙能从边界跳到所求路径的的开始位置,然后跳跃次数少于3的不算。一条直线上的点可以是不同青蛙跳跃的痕迹。 先排序,然后枚举开始的两个点,其实也就相当于枚举斜率,然后计算每一条斜率上最多的跳跃次数。 #include #inc原创 2011-08-29 11:07:18 · 976 阅读 · 0 评论 -
HDU 1231 最大连续子序列 (dp)
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输原创 2011-11-15 22:30:41 · 3895 阅读 · 0 评论 -
【IOI 1999】橱窗布置 (DP)
Description 假设以最美观的方式布置花店的橱窗,有F束花,每束花的品种都不一样,同时,至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,并从左到右,从1到V顺序编号,V 是花瓶的数目,编号为1的花瓶在最左边,编号为V的花瓶在最右边,花束可以移动,并且每束花用1到F 的整数惟一标识,标识花束的整数决定了花束在花瓶中列的顺序即如果I 例如,假设杜鹃花的标识数为1,原创 2012-08-07 19:05:01 · 1406 阅读 · 0 评论 -
ZOJ 2042 Divisibility (DP)
【问题描述】 Consider an arbitrary sequence ofintegers. One can place + or - operators between integers in the sequence, thusderiving different arithmetical expressions that evaluate to different values.Le原创 2012-08-07 19:42:48 · 844 阅读 · 0 评论 -
POJ 1463 Strategic game (树形DP,放置点覆盖边)
题意:给你一颗n个节点的树,在某一个节点上放置一个兵则可以守住与它相邻的边。问最少放置多少个兵才可以看守住所有的边。 #include #include #include using namespace std; struct Edge { int v, next; } edge[3000]; int head[3000], E; int n, vist[3000]; int dproot[3原创 2012-07-28 17:17:49 · 1039 阅读 · 0 评论 -
HDU 1412 搬寝室 DP
题意:。。。 题解: 将所有的数从小到大排序。 证明一个性质:若一个数num[i]被选中,那么一定要选num[i-1]或者num[i+1]来与它配对,这样才能使差方最小。 例如有下面四个数,他们从小到大到分别为x, x+a, x+a+b, x+a+b+c 选择(x,x+a),(x+a+b,x+a+b+c) ,差方=a^2+c^2 选择 (x,x+a+b), (x+a,x+a+b+c),原创 2013-05-19 20:48:28 · 945 阅读 · 0 评论 -
方格取数 (多进程DP)
【问题描述】 设有N*N的方格图(N 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 【输入文件】 输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放原创 2012-08-15 17:08:27 · 6886 阅读 · 6 评论 -
巴蜀1697 盖房子 (DP)
Description 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的。 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵)。这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。 他希望找到一块最大的正方形无瑕疵土地来盖房子。 不过,这并不是什么难题,永恒の灵魂在10分钟内就轻松解决原创 2012-08-15 14:39:58 · 1641 阅读 · 0 评论 -
Money Systems (01背包,累加计数)
【问题描述】 母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。[In their own rebelliousway],,他们对货币的数值感到好奇。 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。 举例来说, 使用一个货币系统 {1,2,5,10,...}产生原创 2012-07-30 17:29:52 · 1910 阅读 · 0 评论 -
开心的金明(01背包)
描述 来源 noip2006普及组第二题 金明有N元买m个物品,使每件物品的价值(价值=价格*重要度)总和最大。 设第j件物品的价格为v[j],重要度为w[j] 输入N m(其中N( 从第2行到第m+1行,每行有2个非负整数 v[j],w[j] (其中v表示该物品的价格(v输出输出只有一个正整数,为不超过总钱数的物品的价值总和的最大值(样例输入1000 5 800 2原创 2012-07-30 15:08:33 · 10128 阅读 · 0 评论 -
新年趣事之打牌(01背包+记录路径)
【问题描述】 过年的时候,大人们最喜欢的活动,就是打牌了。xiaomengxian不会打牌,只好坐在一边看着。 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了。于是这副牌的主人得意地说:“这是一幅特制的牌,我知道整副牌每一张的重量。只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了。”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪原创 2012-07-30 19:15:54 · 2282 阅读 · 1 评论 -
金明的预算方案(01背包,捆绑附件)
描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑原创 2012-07-30 16:21:24 · 6117 阅读 · 0 评论 -
积木城堡(Castle)(01背包)
积木城堡(Castle) 时间限制: 1000ms 内存限制: 102400kB 描述 有n个序列,非递增,现在要去掉其中一些数,使得每个序列的和一样大,并且这个和要尽量大。 输入第一行是一个整数N(N输出一个整数,表示最后城堡的最大可能的高度。如果找不到合适的方案,则输出0。样例输入22 1 -13 2 1 -1样例输出3 题解:对每个城堡用01背包,求出它满足条件的所原创 2012-07-30 12:22:50 · 1898 阅读 · 0 评论 -
f013: 砝码称重 (多重背包化01背包) + 南理工:砝码称重(贪心)
内容: 砝码称重(30分) 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重 要求: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个) 输出方式:Total=N (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码原创 2012-07-30 10:54:19 · 4527 阅读 · 0 评论 -
POJ 2176 Folding (字符串)
题意:个你一个字符串将其进行压缩,使得压缩后的串长度最短。 压缩规则: A sequence that contains a single character from 'A' to 'Z' is considered to be a folded sequence. Unfolding of this sequence produces the same sequence of a原创 2012-07-28 11:50:50 · 2038 阅读 · 0 评论 -
HDU 2412 Party at Hali-Bula (树形DP,map)
题意:n个人形成一个关系树,每个节点代表一个人,节点的父节点表示这个人的唯一上司,只有根没有上司。要求从这n个人中选择一部分,使得任意两个人之间没有直接的上下级关系,问最多可以选多少人?并且判断最优方案是否唯一,是则Yes,否则No。 题解:dp[i][0]表示不选择 i 时,以它为根的子树最多可选出的人数;dp[i][1]表示选择 i 时,以它为根的子树最多可选出的人数。sole[i][0]表原创 2012-07-28 21:51:15 · 784 阅读 · 0 评论 -
POJ 1159 Palindrome DP
题意:给定一个字符串,至少插入几个字符才能使它变成回文串。 题解:总结了三种方法,具体如下。 方法一: s1 为原字符串, s2 由 s1 从右至左复制得到。 dp [ i ] [ j ] 表示让 s1 [ i ] 与 s2 [ j ] 左边的字符串完全相等最少需要插入的字符个数。 1.当 s1 [ i ] != s2 [ j ] 时, 假设已知: substr1 : ··原创 2011-08-27 17:48:05 · 611 阅读 · 0 评论 -
POJ 1691 Painting A Board (DFS/状态DP)
题意:给定一个矩形块,它里面包含了n个小矩形块,现在要求将每个小矩形块涂上给定的颜色。涂色过程中,小矩形必须是整块整块的涂,并且只有当某个矩形上面的所有矩形都被涂色之后它才能被涂色。假如每只笔只能涂一种颜色,问至少需要换多少次笔。(第一次拿起笔也算一次)。 题解:给小矩形块编号原创 2011-10-03 13:48:48 · 1775 阅读 · 0 评论 -
两个鸡蛋100层楼(DP)
#include using namespace std; #define N 500 #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) int dp[2][N]; /* dp[i][j] 表示用i个鸡蛋测试第 j原创 2011-09-30 08:05:39 · 4418 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream 状态压缩(DP)
题意:给出一个h*w的矩阵,用长为1宽为2,或者长为2,宽为1的骨牌来填满,求方案数。 题解:放骨牌的时候要么横着放,要么竖着放。现在来规定放置方式,对于矩阵上任意一个点[i,j],在上面放置一块骨牌,如果横着放,那么占据[i,j], [i,j+1];如果竖着放则占据[i,j]原创 2011-09-22 18:57:33 · 574 阅读 · 0 评论 -
POJ 1837 Balance DP
题意:有一个天平,一些砝码和挂钩,要你将全部的砝码挂上使得天平平衡。 题解:因为存在负值,所以用一个一位数组可能会使某个砝码被重复使用(当然,也有人用两个一维数组来解决)。而二维数组避免了这个问题。由于砝码能够产生的最大力矩为+-7500,我们设置一个偏移量以避免数组下标为负。原创 2011-08-24 10:22:49 · 555 阅读 · 0 评论 -
HDU 4049 Tourism Planning 状态压缩(DP)
题意:2011北京网赛题。一些朋友结伴旅游,他们的路线及起点终点都已经确定。每一个人都有权中途离开队伍,或者干脆第一座城市就不去,但是一旦离开就不可以再回来。每座城市都有一个消费值cost,所有人在该城市的消费一样。第 i 个人对第 j 座城市有一个兴趣值inter[i][j]。原创 2011-09-19 20:33:39 · 1802 阅读 · 2 评论 -
POJ 3254 Corn Fields 状态压缩DP
题意:John买了一块矩形的地。他想在上面种草喂奶牛,但是有的格子比较贫瘠不能种草,我们用0表示。否则用1表示。由于奶牛不喜欢挤在一起,所以任何两个相邻格子不能都种上草。现在问你有多少种种草的方式。当然,不种草也算一种方式。 题解:第 i 行的第 j 中状态由前一行决定。故枚举原创 2011-09-17 22:06:30 · 768 阅读 · 0 评论 -
POJ 1050 To the Max DP
题意:给定一个n*n的矩阵,求一个子矩阵,使得该矩阵的元素之和最大。 思路:经典的DP。由一维到二维。 1.必须先了解一维的情况,对于一维的数组而言,则转化为用DP求最大连续子序列,DP的状态方程为:sum[i] = max(sum[i-1] + num[i], 0)。原创 2011-09-10 01:21:04 · 536 阅读 · 0 评论 -
POJ 1088 滑雪 DP
题意:Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子原创 2011-09-10 01:32:09 · 1175 阅读 · 0 评论 -
POJ 2624 Charm Bracelet DP(背包问题)
题意:Bessie去珠宝点里买镯子,现在有n只镯子,每只有有一个权重w,一个吸引力d。Bessie最多能拥有的权重为weight。求Bessie所能买得镯子的总吸引力的最大值。 #include #include using namespace std; int dp[128原创 2011-09-10 00:49:24 · 695 阅读 · 0 评论 -
POJ 1276 Cash Machine DP(多重背包化01背包)
题意: 现在需要价格总额为cash的钱,有version种面值的钱币,每种钱币的数目为amount,面值为denomination,求解在小于或等于所需价格总额的情况下所能组成的最大价值总和. 题解:每一种货币面值乘以系数1,2,4,...,2^(k-1), amount-2^原创 2011-09-10 00:38:19 · 655 阅读 · 0 评论 -
POJ 2063 Investment DP(完全背包)
题意:John有一笔钱,他想投资来获得利润。现在给出他的本金,准备投资的时间长,可以购买的基金种类,以及每一种基金的购价与利息。求他可以获得的最大收益。每一年的利息算入下一年的本金。 题解: 由于基金的购价都是1000的倍数,所以可以将本金除1000来缩小背包。 #inclu原创 2011-09-09 23:51:17 · 778 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon DP
题意:给定一条原始字符序列,以及一些单词,问至少去掉多少个字母才能使原始序列全部由单词组合而成。 题解: dp [ i ] 表示在第 i 个字母之前最少要删除的字母个数。 枚举原始序列的每一个字母,0,1,2,3····。只有删与不删两种状态。假设删掉第 i 个字母,则 d原创 2011-08-25 10:54:15 · 555 阅读 · 0 评论 -
POJ 1836 Alignment DP(LIS)
题意:从一列队伍中抽出一些人,使得剩下的队伍中的人按身高有序排列(升序,或者降序,或者先升后降). 题解:LIS。枚举边界。边界左边的人身高逐渐升高,右边的逐渐降低。 #include #define N 1010 double array[N]; int dpleft[原创 2011-08-25 19:38:28 · 654 阅读 · 0 评论