
动态规划-线性DP
文章平均质量分 64
FDU_Nan
去做一个会思考,善于思考的人儿。
展开
-
ural 1114. Boxes(dp)
http://acm.timus.ru/problem.aspx?space=1&num=1114有n个盒子,两两种颜色的球,红球和篮球分别有a和b个,现在随意向盒子里放球,每个盒子可以放一种颜色,两种颜色或不放。问有多少种方法。设dp[i][j][k]表示到第i个盒子还剩下j个红球和k个篮球,可以列出状态转移方程:dp[i][j][k] =∑ ( dp[i-1][jj原创 2014-11-05 11:15:57 · 1278 阅读 · 0 评论 -
hdu 4374 One hundred layer(单调队列优化dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4374题意:简化一下,有一个n*m的矩阵,每格有一个分数,一个人站在(1,x)位置,在每一行中,他只能朝一个方向走(向左或向右),且最多走t步,问走到最后第n行得到的最大分数。思路:dp[i][j]表示i行 j列位置的最大分数,若从左到右,dp[i][j] = max(dp[i-1][k]+sum[j]-原创 2014-03-12 19:01:03 · 1210 阅读 · 1 评论 -
hdu 1503 Advanced Fruits(最长公共子序列变形)
http://acm.hdu.edu.cn/showproblem.php?pid=1503题意:给两个字符串,组成一个长度尽可能小的字符串,它包含上述两个字符串,且原字符串中的字符在该串中的相对位置不变。思路:想到了最长公共子序列,但需要找到最长公共子序列是哪些。可以拿个二维数组记录第一个字符串i和第二个字符串j处的状态。然后根据状态递归,分别用一个数组记录公共字符在两个字符串中的位置。原创 2014-03-05 20:03:17 · 1296 阅读 · 0 评论 -
hdu FatMouse and Cheese(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1078很好的一道题。先排序再dp,再开个标记数组。#include #include #include using namespace std;const int INF = 0x3f3f3f3f;int dp[110][110],map[110][110];int vis[110][110]原创 2014-03-03 23:47:18 · 885 阅读 · 0 评论 -
hdu 1227 Fast Food(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1227转载:在n个商店中建m个仓库,使各个商店到仓库的路程之和最小,商店到哪个仓库是有选择的,总之路程之和要最小! 我还以给的例子来说,这道题的具体思路:本来想做个图的,这样更清晰,我辛苦做出来的弄上面无法显示啊!我泪奔啊1227 Fast Food (DP原创 2014-03-04 21:46:39 · 953 阅读 · 0 评论 -
poj 1159 Palindrome(最长公共子序列 + 滚动数组)
http://poj.org/problem?id=1159题意:给定一个字符串,问最少插入多少个字符,使得该字符串变成回文字符串。思路:原字符串序列是X,逆序列是Y,则最少需要补充的字母数=X的长度-X和Y的最长公共子序列的长度。这道题重要的是对空间压缩的处理,数据范围达到5000,开静态数组int会超。这里用到滚动数组。节省了空间。#include #include #incl原创 2014-02-20 17:04:03 · 840 阅读 · 0 评论 -
hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(二进制优化 多重背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2191多重背包。每种物品的数量有限。求背包所放物品的最大价值。本题没要求钱正好花完,所以初始化时全部初始化为0。#include #include #include using namespace std;const int INF = 0x3f3f3f3f;int n,m;int原创 2014-02-20 15:03:10 · 1031 阅读 · 0 评论 -
hdu 1114 Piggy-Bank(完全背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1114题意:完全背包,每种物品都有无穷多件,问恰好装满背包所放物品的最少价值。注意:题目要求恰好装满背包,初始化时,dp[0] = 0。要求最小价值,其余dp[i] = INF 。#include #include #include using namespace std;const int原创 2014-02-20 12:54:49 · 747 阅读 · 0 评论 -
hdu 1176 免费馅饼(数字三角形)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21810 Accepted Submission(s): 7362Problem Description都说天上不会掉馅饼,但有一天gameboy正走在回家原创 2014-02-20 09:57:29 · 1337 阅读 · 0 评论 -
hdu 1257 最少拦截系统
最少拦截系统Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14919 Accepted Submission(s): 5937Problem Description某国为了防御敌国的导弹袭击,发展出一原创 2014-02-20 09:16:29 · 1333 阅读 · 0 评论 -
hdu 1159 Common Subsequence(最长公共子序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1159#include #include int dp[1100][1100];int main(){ char s1[1100],s2[1100]; while(~scanf("%s %s",s1,s2)) { memset(dp,0,sizeof(dp)); int le原创 2014-02-20 08:41:19 · 937 阅读 · 0 评论 -
hdu 1003 Max Sum(简单DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1003题意:求连续子区间的最大和。思路:dp[ i ]表示以i结尾的序列的最大和。那么 dp[ i ] = max( dp[i-1] + a[i], a[i])。#include #include int dp[100010],a[100010];int main(){ int test;原创 2014-02-19 21:38:38 · 660 阅读 · 0 评论 -
hdu 2845 Beans(最长不连续子序列和)
http://acm.hdu.edu.cn/showproblem.php?pid=2845题意:有一个n*m的矩阵,每个矩阵里都有一个值且为正。当选择一个数(x,y),那么就不能加(x,y-1),(x,y+1)以及x-1行和x+1行的数。问最后这个矩阵的最大和是多少?思路:对于每一行,求最大不连续子序列之和。dp[i] = max( dp[i-2]+row[i], dp[i-1] )。这原创 2014-03-03 21:07:44 · 1048 阅读 · 0 评论 -
hdu 1502 Regular Words(java大数加法+dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1502题意:ABC每个字母有n个,求满足要求的排列的个数:在该排列的任意前缀中满足 A的个数不少于B的个数 不少于C的个数。思路:dp[i][j][k]表示该串由i个A,j个B,k个C组成,状态转移方程:dp[i][j][k] = dp[i-1][j][k]+dp[i][j-1][k]+dp[i][j原创 2014-03-06 23:48:29 · 1116 阅读 · 0 评论 -
hdu 4362 Dragon Ball(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4362题意:有m个阶段,每个阶段都有n个龙珠,当在某一阶段选择一个龙珠,该阶段其他龙珠都会消失。给出两个m*n的矩阵,第一个矩阵表示消灭第i个阶段第j个龙珠的位置,第二个矩阵表示取第i个阶段第j个龙珠消耗的能量,同时当第x个位置到第个位置需要消耗 | y - x|的能量。问最后每个阶段取走一个龙珠最小的能量消原创 2014-03-10 23:01:01 · 1034 阅读 · 0 评论 -
URAL 1073. Square Country(完全背包)
http://acm.timus.ru/problem.aspx?space=1&num=1073今天发生了各种事情,全是坏事,悲剧。状态降到了低谷。原本一道简单的题想跑偏了。有简化一下,拿n元钱去买地,已知每块地都是正方形,而且它的花费是a*a(a半径)。问这些钱所买地的最少块数,钱要正好花完。思路:完全背包问题。每种地都是无限的。每块地的花费是a*a,权值是1。所以问题就转原创 2014-03-18 20:46:26 · 1171 阅读 · 0 评论 -
hdu 4901 The Romantic Hero(计数dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4901dp1[i][j] : 0~i中的数进行异或得到j的种类数,不一定包含i。dp2[i][j]:i~n-1中的数进行与得到j的种类数,不一定包含i。dp3[i][j] : i~n-1中的数进行与得到j的种类数,包含i,防止计数重复。注意中间取余#include #include原创 2014-08-04 17:10:04 · 641 阅读 · 0 评论 -
训练赛 An Easy Game(dp)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=158#problem/C感觉这道题是应该做出来的。。太挫了,没找到状态方程。大致题意:输入n,k,m,以及两个长度为n的只含01的字符串,每次你可以选m个数字转换,即将0变1,1变0,需要经过k次变换使第一个字符串变为第二个字符串。这题把数组设出来就容原创 2014-06-21 21:34:00 · 1044 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(母函数|多重背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1171题意:有n种物品,给出每种物品的价值和数目,要将这些物品尽可能的分成相等的两份A和B且A>=B ,输出A,B。母函数可以过,但感觉最直接的方法应该是多重背包。母函数的话,也是按总价值的一半求,从一半到小枚举,直到找到系数不为0的就是B。#include #include原创 2014-07-27 20:11:24 · 1015 阅读 · 0 评论 -
poj 4045 Power Station(初涉树形dp)
http://poj.org/problem?id=4045大致题意:有n个村庄,求将发电站建在哪一个村庄使得花费最少。这是一个无向无环图。简化一下就是求一个节点使它到其他所有节点的距离和最小。起初一直在向最短路上靠,但因为节点和边数太大,必定TLE。然后无比强大的啸神随便写了两个dfs就过掉了,简直膜拜。赛后搜了搜题解,发现这是道树形dp。sad,真的要好好刷dp了。原创 2014-07-08 01:25:45 · 1343 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(分组背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1712题意:给一个n*m的矩阵,有n种作业,每种作业花费的时间不同获得的价值不同,a[i][j]表示第i种作业花费j天的话收获的价值为a[i][j]。问m天内收获的最大价值。思路:分组背包。问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干原创 2014-02-26 19:32:57 · 1448 阅读 · 0 评论 -
hdu 4341 Gold miner(分组01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=4341看到这个图好亲切,黄金矿工,很好玩的游戏。。。题意:矿工起初在(0,0)位置,有n种金矿,给出每种金矿的坐标,花费时间和价值。在同一条线上的金矿必须先抓近的再抓远的,若近的不抓没办法抓远的。要求在T时间内获得的最大价值。思路:01背包问题,但需要变形。 变形之处就是解决在同一条线原创 2014-03-07 20:24:39 · 1528 阅读 · 0 评论 -
hdu 2159 FATE(二维完全背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2159二维完全背包,限定因素是容量和物品总个数,内层循环顺序,#include #include #include using namespace std;const int INF = 0x3f3f3f3f;int dp[110][110];int main(){ int n,m,k,原创 2014-03-03 11:28:53 · 1108 阅读 · 0 评论 -
uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=116#problem/D题意:输入n和m,有n个点和m条有向边,求出一个节点集合包含的节点个数最多,并且该节点内的任何两点a,b,要么a能到达b,要么b能到达a,要么a和b互相到达。思路:强连通分量缩点形成有向无环图DAG,把缩点后的每个点的权值置为该强连通分量的节点个数原创 2014-04-18 23:41:48 · 2076 阅读 · 0 评论 -
hdu 3033 I love sneakers!(分组背包,每组至少取一件)
http://acm.hdu.edu.cn/showproblem.php?pid=3033大致题意:某人要买鞋子,有k种鞋,要求每种鞋至少买一双,给出每双鞋子的花费和价值,问m元钱可以买到的鞋子的最大价值是多少。思路:分组背包问题。与传统的分组背包不同:每组物品至少取一件;且每组中物品任意取。想一想传统的分组背包,每组至多选一件:for 所有的组k fo原创 2014-05-04 20:34:18 · 2084 阅读 · 0 评论 -
hdu 1516 String Distance and Transform Process(编辑距离+保存修改路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1516还是编辑距离,这里要同时输出编辑过程。开始我以为只能正着输出编辑过程,dfs了很久,其实分别对两个字符串根据dp[i][j]的变化逆推回去就可以A。#include #include #include using namespace std;char s1[100],s2[100]原创 2014-03-10 13:02:02 · 1527 阅读 · 0 评论 -
hdu 4323 Magic Number(编辑距离)
http://acm.hdu.edu.cn/showproblem.php?pid=4323题意:有n个数和m个询问。对于每个询问有一个数和临界值,问n个数中与这个数的编辑距离不大于临界值的数的个数。对于编辑距离:假设字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符修改成另一个字符这三种操作。 我们把进行了一次上述三种操作的任意一种操作称为进行了一步字符基本操作。下原创 2014-03-07 17:08:00 · 1016 阅读 · 0 评论 -
poj 2392 Space Elevator(未优化的多重背包)
http://poj.org/problem?id=2392题意:有K种石头,每种石头的高度为h,数量为num,它放置的高度不能超过a。问这些石头最高能达到的高度。思路:纯多重背包。将k种num个的多重背包转化成∑numi个物品的01背包。首先要对a从小到大排序,这是为了能够找到最优解,然后进行01背包,利用hash【】标记能够达到的高度.#include #incl原创 2014-02-20 16:15:51 · 781 阅读 · 0 评论 -
hdu 4223 Dynamic Programming?(最小连续子序列绝对值和)
http://acm.hdu.edu.cn/showproblem.php?pid=4223求连续子序列之和的绝对值最小值这题做的真失败,不知道为什么用dp[i]表示到i为止绝对值最小值,WA了n次。直接暴力吧,#include #include #include #include using namespace std;const int INF = 0x3f3f3f3f;原创 2014-03-02 10:47:04 · 2468 阅读 · 0 评论 -
poj 1836 Alignment( 最长上升(下降)子序列 )
http://poj.org/problem?id=1836题意:给n个士兵的身高,要求每个士兵向左或向右能看向无穷远处(新队列呈三角形分布),最少要剔除几个士兵;思路:对数列分别顺序,逆序求最长上升子序列,然后枚举i和 j,使得以i结尾的上升子序列与以j开头的下降子序列的和最大;#include #include #include using namespace s原创 2014-02-24 16:42:30 · 1095 阅读 · 0 评论 -
poj 1837 Balance(01背包 天平平衡)
题目大意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。其中可以把天枰看做一个以x轴0点作为平衡点的横轴输入:2 4 //C 钩子数 与 G钩码数-2 3 //负数:左边的钩子距离天平中央的距离;正数:右边的钩子距离天平中央的距离c[k]3 4 5 8 //G个重物的质量w[i]原创 2014-02-24 16:26:13 · 1323 阅读 · 1 评论 -
hdu 1069 Monkey and Banana(dp 最长上升子序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1069题意:有n种类型的木块,木块是长方体,已知每种长方体的长宽高,且每种木块的数量是无限的。问这些木块能够摞起来的最高高度,摞起来的规则是上面的木块的长和宽必须严格小于下面木块的长和宽。思路:把每种木块分成六种木块,然后对x排序,再对x和y求类似于最长上升子序列。这里dp对应的不是个数,而是摞起来的最高原创 2014-02-24 21:24:03 · 821 阅读 · 0 评论 -
poj 3267 The Cow Lexicon(dp)
http://poj.org/problem?id=3267题意:给出一个由m个字符组成的单词和n个单词表,问至少删除多少个字母使这个单词才能由下面的单词表中的单词组成;browndcodw 中删除两个d后由brown 和 cow 组成;思路:从最后一个字母开始匹配,先初始化,dp[m] = 0,假使当前字母不能匹配,则dp[i] = dp[i+1] + 1;然后,遍历单词原创 2014-02-24 11:20:09 · 903 阅读 · 0 评论 -
hdu 1058 Humble Numbers(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1058题意:求出前5842个质因数只在(2,3,5,7)中的数.思路:感觉有点像递推。若一个数是Humble Numbers,那么它的2,3,5,7倍也是Humble Numbers。但是要求数组是按下标递增的,所以 f[n] = min(2*f[i], 3*f[j], 5*f[k], 7*f[l]),i原创 2014-02-24 10:31:58 · 1008 阅读 · 0 评论 -
hdu 2844 Coins(多重背包 可达不可达)
http://acm.hdu.edu.cn/showproblem.php?pid=2844题意:一位同学想要买手表,他有n种硬币,每种硬币已知有num[i]个。已知手表的价钱最多m元,问她用这些钱能够凑出多少种价格来买手表。思路:多重背包。但不能直接转化为01背包求,因为数据太多,TLE无疑。。可以增加一个一维数组use[ i ],记录到达i元时j种钱用的次数。#include原创 2014-02-22 19:08:44 · 1163 阅读 · 0 评论 -
hdu 1421 搬寝室(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=1421思路:先排序。 dp[i][j]表示前i件物品选j对的最优解。状态转移方程:如果 i == j*2,只有一种选择,dp[i][j] = dp[i-2][j-1] + (a[i]-a[i-1])*(a[i]-a[i-1])否则 dp[i][j] = min( dp[i-2][j-1] +原创 2014-02-21 19:17:53 · 831 阅读 · 0 评论 -
hdu 1160 FatMouse's Speed(最长上升子序列 +记录路径)
http://acm.hdu.edu.cn/showproblem.php?pid=1160题意:有若干只老鼠,给出每只老鼠的大小和速度。输出尽量多的老鼠的下标m1,m2,m3......满足下标对应的老鼠大小严格递增而老鼠速度严格递减。思路:先对老鼠的速度从大到小排序,在对老鼠的大小求最长上升子序列。在这过程中,用pre[ ]记录路径。#include #include #inc原创 2014-02-21 18:08:29 · 1125 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(多重背包转化为01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1171一道破题。。敲了好久,中间换了两种思路。首先注意输入,不是以-1结束,而是以负数结束。贡献2次Wa。把多重背包转换为01背包,求出总的价值,以总价值的一半为背包的容量,求出它能装下的最大价值。然后总价值减去该值就是另一个答案。脑卡了,整了两个背包。。#include #include #原创 2014-02-21 20:45:36 · 887 阅读 · 0 评论 -
hdu 3339 In Action(最短路径+01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=3339题意:有n个基地,每个基地都有一定的能量,到达每个基地需要一定的花费,tank从0出发,每个基地都有一个tank,选择一些基地使得他们的能量和大于总能量的一半且花费最少。思路:先floyd求出0到每个基地的耗油量,即花费cost[i]。以cost[i]为花费,weight[i]为价值原创 2014-02-21 15:41:14 · 912 阅读 · 0 评论 -
hdu 1087 Super Jumping! Jumping! Jumping!(最大递增子段和)
http://acm.hdu.edu.cn/showproblem.php?pid=1087题意:求最大递增子段和。思路:与求最长上升子序列和异曲同工。#include #include #include using namespace std;const int INF = 0x3f3f3f3f;int main(){ int n,a[1010]; int dp[1原创 2014-02-20 20:20:29 · 729 阅读 · 0 评论