动态规划
文章平均质量分 84
知足c
Good afternoon, Good evening and Good night~
展开
-
HDU 2059 龟兔赛跑(DP)
题意 中文简单的多阶段决策DP 令p[0]=0 p[n]=l d[i]表示乌龟从起点到第i个加油站所需的最小时间 那么有d[i]=min(d[i],d[j]+t(j,i)) t(j,i)表示 在第j个加油站加满油 然后直接开到第i个加油站 当然第0个加油站是起点就不用加油了 这样推到最后d[n]就是乌龟所需的最小时间了#include#include#原创 2014-08-18 19:42:13 · 1075 阅读 · 0 评论 -
HDU 2845 Beans(DP,最大不连续和)
题意 吃豆子游戏 当你吃了一个格子的豆子 该格子左右两个和上下两行就不能吃了 输入每个格子的豆子数 求你最多能吃多少颗豆子可以先求出每行你最多可以吃多少颗豆子 然后每行就压缩成只有一个格子了 里面的豆子数就是那一行最多可以吃的豆子数 然后问题就变成求一列最多可以吃多少颗豆子了 和处理每一行一样处理 那么问题就简化成求一行数字的最大不连续和问题了令d[i]表示某一行前i个豆子的最大和 有两种情况 吃第i个格子中的豆子和不吃第i个格子中的豆子 a[i]为原创 2014-08-11 20:42:14 · 956 阅读 · 0 评论 -
HDU 2870 Largest Submatrix(DP)
题意 求最大相同字符子矩阵 其中一些字符可以转换其实就是HDU1505 1506的加强版 但是分了a,b,c三种情况 看哪次得到的面积最大对于某一个情况 可以把该字符和可以转换为该字符的位置赋值0 其它位置赋值1 这样就转化成了求最大全0矩阵的问题了对于转换后矩阵中的每个点 看他向上有多少个连续0 把这个值存在h数组中 再用l数组和r数组记录h连续大于等于该位置的最左边位置和最右位置 这样包含(i,j)点的最大矩阵面积就是(r[i][j]-l[i][j]+1)*h[i][j] 面积最大的点就原创 2014-08-11 14:27:12 · 921 阅读 · 0 评论 -
HDU 1171 Big Event in HDU(多重背包)
题意 把一堆东西尽量分为两份 第一份不小于第二份把所有东西的总价值s除以2 让它装尽量多的东西作为第二份 剩下的就是第一份了 题目有个小坑点 是以负数作为结束条件的 不是-1 还有不要开始把s/=2 后来第一份又用s*2-d[s] 因为s/2*2不一定等于s了原创 2014-08-10 08:14:20 · 1275 阅读 · 0 评论 -
HDU 1421 搬寝室(DP)
先把物品重量从小到大排序 d[i][j]表示前i件物品选j对的最小疲劳 若选了第i个物品 那么和它一对的必是第i-1个物品 注意是前i件i=j*2时 没有选择 d[i][j]=d[i-2][j-1]+(w[i]-w[i-1])^2i>j*2时 存在第i个选或者不选之分若选了第i个的话 那么问题就转化为在i-2个物品中选j-1个了若不选第i个的话 问题转化为在i-1个物品中选j个了那么就有转移方程d[i][j]=min(d[i-1][j],d[i-2][j-1]+(w[i]-w[i-1原创 2014-08-11 10:12:42 · 846 阅读 · 0 评论 -
HDU 2159 FATE(二维完全背包)
中文题目就不用解释了 就是裸的二维完全背包d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验 然后就用完全背包来做了 二维背包背包不过是多了一重循环原创 2014-08-10 09:03:58 · 981 阅读 · 0 评论 -
HDU 2844 Coins (组合背包)
题意 给你n种面额不同的金币和每种金币的个数 求这些金币能组合成的面额在m内有多少种还是明显的背包问题 d[i]表示这些金币在i内能组合成的最大面额 初始化d为负无穷 d[0]=0 这样就可以保证d[i]恰好为i时才能为正值原因可以自己想想 然后就用背包背吧 直接多重背包也可以过 但是分成多重背包和完全背包要快一点原创 2014-08-10 14:49:34 · 859 阅读 · 0 评论 -
HDU 1069 Monkey and Banana(DP 长方体堆放问题)
题意 给你n种长方体 每种都有无穷个 三条棱长为a,b,c 当一个长方体的长宽都小于另一个时 这个长方体就可以堆在另一个上面 求这些长方体能堆起的最大高度每个长方体都有6种放置方式 但只有三种高度 分别为a,b,c 为了便于操坐 可以把一个立方体分为三个 每个的高度都是唯一的 然后就可以用最长连通来求了 令d[i]表示以第i个长方体为最顶上一个时的最大高度 当第i个长方体的长和宽小于第j个的长和宽或宽和长时 第i个就可以放在第j个上面 即d[i]=max(d[i],d[j]+原创 2014-08-09 20:22:35 · 1323 阅读 · 0 评论 -
HDU 1087 Super Jumping! Jumping! Jumping!(DP)
题意 求n个数字的和最大的递增子序列基础的dp题目 令d[i]表示以第i个数字结尾的和最大的递增子序列 有d[i]=max(d[i],d[j]+a[i]) j为1到a之间的数 且a[i]>a[j]原创 2014-08-09 19:24:36 · 985 阅读 · 0 评论 -
POJ 3934 Queue(DP)
题意 linda在一个幼儿园当老师 他要把n个学生排成一列 使只有m对学生能够讲话 当两个学生相邻或者他们之间的所有人都比他们矮时 他们就能够讲话每个学生的身高都不同令d[i][j]表示把i个学生排成一列使j对学生能够讲话的方法数可以把i个学生分成i-1个学生和一个最矮的学生 把这个学生放在i-1个学生中任意两个学生之间都不会影响原来的结果 但是能讲话的学生对数增加了2 有i-2种放法或者把这个最矮的学生放在两边 这样能讲话的对数只增加了1 有两种放法所以有转移方程d[原创 2014-08-08 09:31:56 · 1143 阅读 · 0 评论 -
HDU 1003 Max Sum(dp,最大连续子序列和)
题意 求n个数字的最大连续和DP的入门题目 令d[i]表示以第i个数a为右端的最大连续子序列和 那么很容易得出转移方程 d[i]=max(d[i-1]+a,a)很显然 当第i个数比以第i-1个数为右端的最大和加上第i个数还大的时候 以第i个数为右端的最大和就是第i个数自己了 同时更新左端为自己原创 2014-08-07 10:06:51 · 956 阅读 · 0 评论 -
POJ 3390 Print Words in Lines(DP)
POJ 3390 题意 把n个单词排版 每行最多m个字符 不同单词间有空格 每行最后一个单词后没空格 空格占一个字符 当一行的字符数与m的差为t时 就会扣t*t分 求最少扣分令a[i]表示第i个单词的长度 s[i]表示从第一个单词到第i个单词单词长度和d[i]表示前i个单词排版后最少扣的分 则t=m-(s[i] - s[j] + i - j - 1)表示把从第j+1个单词到第i个单词放在一行时这行的字符长度与m的差 那么当t>=0时 有转移方程 d[i]=min(d[i],d原创 2014-08-01 16:34:50 · 987 阅读 · 0 评论 -
HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
题意 给你一个n*m矩阵 每列都可以随便交换位置 求最优交换后最大的全1子矩阵又是HDU 1505 1506的变种 但这个更容易了 因为每列都可以交换位置了 那么这一行中所有比i高的都可以与i相邻了 只需要统计这一行有多少个比i高就行了 可以在算出每一行后 把高度大的放前面去 用num[i]记录排序后的列原来的数 这样就有j列比h[i][num[j]]高了 最后的答案也就是max(j*h[i][num[j]])原创 2014-08-11 19:26:03 · 879 阅读 · 0 评论 -
HDU 1058 Humble Numbers(DP,数)
题意 所有只能被2,3,5,7这4个素数整除的数称为Humble Number 输入n 输出第n个Humble Number1是第一个humble number 对于一个Humble Number a 有2*a,3*a,5*a,7*a都是Humble Number 可以以1为基数 依次展开即可得到一定范围内的Humble Number 用i,j,k,l分别记录 2,3,5,7分别乘到了第几个Humble Number 当前在计算第cnt个Humble Number 那么有 hum[c原创 2014-08-12 10:14:16 · 908 阅读 · 0 评论 -
HDU 1300 Pearls(DP)
题意 珠宝店到珍珠批发商进货 第i种价格为p[i]的珍珠需要n个 则珍珠的结算价格为∑(n+10)*p[i] 由于没种珍珠的数量结算时都要加上10 所以有时候把便宜的珍珠换为贵的结算价格反而变少了 给你一张购买清单 珍珠价格是递增的 每种珍珠都可以替换为比它贵的 求最少总花费简单dp 令d[i]表示前i种珍珠的最少花费 sum[i]表示第1种到第第i种的总数原创 2014-08-18 10:49:27 · 1066 阅读 · 0 评论 -
HDU 1501 Zipper(DP,DFS)
题意 判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c本题有两种解法 DP或者DFS考虑DP 令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个字符 值为0或者1 那么有d[i][j]=(d[i-1][j]&&a[i]==c[i+j])||(d[i][j-1]&&b[i]==c[i+j]) a,b的下标都是从1开始的 注意0的初始化原创 2014-08-18 08:42:45 · 935 阅读 · 0 评论 -
POJ 1692 Crossed Matchings(DP)
题意 有两行数a[n1] b[n2] 分别有n1 n2个数 当第一行一个数和第二行一个数相等时 他们就可以连起来 每个数只能连一个 求最有多少条线使得每条都至少有一条和它相交令d[i][j]表示 a的前i个数和j的前j个数最多可以连接多少条当a[i]==b[j]时 将们连起来是肯定不与其它线相交的 所以d[i][j]=max(d[i-1][j],d[i][j-1])当a[i]!=b[j]时 如果可以在第一行找一个数x<i 第二行找一个数y<j 使得a[x]==b[j原创 2014-08-15 14:38:51 · 1134 阅读 · 0 评论 -
HDU 1081 To The Max(DP)
题意 求一个n*n矩阵的最大子矩阵和HDU 1003 max sum 的升级版 把二维简化为一维就可以用1003的方法去做了 用mat[i][j]存 第i行前j个数的和 那么mat[k][j]-mat[k][i]就表示第k行 第i+1个数到第j个数的和了 再将k从一枚举到n就可以得到这个这个宽度为j-i的最大矩阵和了 然后i,j又分别从1枚举到n就能得到结果了 和1原创 2014-08-17 15:32:21 · 865 阅读 · 0 评论 -
HDU 1114 Piggy-Bank(完全背包 DP)
题意 知道空存钱罐的重量和装满钱的存钱罐的重量及每种币值的重量 求存钱罐里至少有多少钱 裸的完全背包 但是是求最小值 所以初始0要变成初始INF max也要变成min原创 2014-08-15 15:23:33 · 983 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(DP)
题意 老鼠在一个小镇吃奶酪 城镇可以看成一个n*n的矩阵 其中每个格子都有一定数量的奶酪mat[i][j] 老鼠从(0,0) 开始吃 而且下个吃的格子里的奶酪必须比上个格子多 老鼠只能水平方向或者垂直方向走 而且每次走的距离不能超过k 求老鼠最多能吃多少奶酪起点是固定的 比较容易 直接记忆化搜索令d[i][j]表示以(i,j)为终点的最优解 那么对于所有(i原创 2014-08-17 14:52:35 · 1006 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed(DP)
题意 输入n个老鼠的体重和速度 从里面找出最长的序列 是的重量递增时速度递减简单的DP 令d[i]表示以第i个老鼠为所求序列最后一个时序列的长度 对与每个老鼠i 遍历所有老鼠j 当(w[i] > w[j]) && (s[i] #include#includeusing namespace std;const int M=1005;int w[M], s[M], d[原创 2014-08-15 16:35:16 · 960 阅读 · 0 评论 -
HDU 1789 Doing Homework again(贪心)
题意 某大参加ACM竞赛回来落下很多作业 每个作业都有最后期限 没在最后期限之内做完期末就要扣掉对应的分 求最少扣多少分把所有作业按扣分大小从大到小排序 然后就贪阿 能完成前面的就完成前面的 实在不能的就扣分吧~#include#include#includeusing namespace std;const int N = 1005;int dli[N], r原创 2014-08-14 20:13:57 · 1157 阅读 · 0 评论 -
Codeforce 22B Bargaining Table
HDU 1505,1506的变形 只是由求面积变成了求周长 具体分析可见http://blog.csdn.net/iooden/article/details/38379065另外这题数据比较小 也可以暴力枚举 枚举每点作为左上角 然后枚举合法的的长和宽, 判断形成的的矩阵是否全由 '0'组成, 如果是就更新结果原创 2014-08-05 22:43:48 · 1036 阅读 · 0 评论 -
HDU 1978 How many ways(DP)
题意 中文 但要注意小于你能量的点也是能到达的令d[i][j]表示到达第i行第j列的方法数 初始化为0 d[1][1]为1 输入一个点的能量t后 枚举这个点能到的所有点(i+x,j+y)(x+y<=t) 有d[i+x][j+y]+=d[i][j] 因为只能向右走和向下走 可以保证每次更新后均为当前最优解 输入最后一个点后 就得到答案了原创 2014-08-14 09:51:53 · 852 阅读 · 0 评论 -
POJ 1157/SGU104 Little shop of flowers(DP)
题意很简单 你有f束花和v个花瓶 每束花放在不同的花瓶中都会有不同的价值 并且花的相对顺序不能改变 也就是说第i束花放在第j个花瓶中 那么第i+1朵花要放在j以后的花瓶中 设d[i][j]表示第i朵花放在第[j]个瓶子中前i朵花的最大价值 有状态转移方程 d[i][j]=max{d[i-1][1~j-1]}+val[i][j];题目有几个坑点 可能所有价值都为负数 必须所有花都放完原创 2014-07-08 12:26:19 · 879 阅读 · 0 评论 -
HDU 3008 Warcraft (DP)
题意 你去打boss 开始你的蓝和血还有boss的血都是100 每秒你先打boss一下 然后boss打你一下你减少q点血 你有n个技能 第i个技能耗蓝a[i] 对boss的伤害为b[i] 普攻伤害为1 而且你每秒回复t点蓝(恢复后不超过100) 求你最少可以多少次打死boss你最多能打100/q或者100/q+1次 令d[i][j]表示第i秒所剩蓝量为j时bos原创 2014-08-18 15:56:54 · 1112 阅读 · 0 评论 -
POJ1505&&UVa714 Copying Books(DP)
题意 k个人复制m本书 求最小的时间 即把m个数分成k份 使和最大的那份最小d[i][j]表示i个人完成前j本书需要的时间 有转移方程d[i][j]=min(d[i][j],max(d[i-1][k],s[j]-s[k])) k表示i-1到j之间的所有数 s[k]表示从第一本书到第k本书需要时间的和 初始d[1][i]=s[i];原创 2014-08-01 09:25:15 · 958 阅读 · 0 评论 -
UVa 10285 Longest Run on a Snowboard(DP)
题意:在一个矩阵中找出最长递减连续序列,也是较基础的dp;原创 2014-07-10 20:48:27 · 792 阅读 · 0 评论 -
UVa 10051 Tower of Cubes(DP 最长序列)
Problem A: Tower of Cubes In this problem you are given N colorful cubes each having a distinct weight. Each face of a cube is colored with one color. Your job is to build a tower using th原创 2014-07-23 15:06:11 · 994 阅读 · 0 评论 -
UVa 10651 Pebble Solitaire(DP 记忆化搜索)
Pebble Solitaire Pebble solitaire is an interesting game. This is a game where you are given a board with an arrangement of small cavities, initially all but one occupied by a pebble each. The原创 2014-07-23 21:30:30 · 1012 阅读 · 0 评论 -
UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
Wavio Sequence Wavio is a sequence of integers. It has some interesting properties.· Wavio is of odd length i.e. L = 2*n + 1.· The first (n+1) integers of Wavio sequence makes a strictly i原创 2014-07-22 09:14:55 · 1111 阅读 · 0 评论 -
UVa 825 Walking on the Safe Side(DP)
Square City is a very easy place for people to walk around. The two-way streets run North-South or East-West dividing the city into regular blocks. Most street int原创 2014-07-20 21:20:11 · 1048 阅读 · 0 评论 -
UVa 10404 Bachet's Game(DP)
Bachet's GameBachet's game is probably known to all but probably not by this name. Initially there are nstones on the table. There are two players Stan and Ollie, who move alternately. Stan always原创 2014-07-20 09:10:08 · 857 阅读 · 0 评论 -
UVa 437 The Tower of Babylon(动态规划)
The Tower of Babylon Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educational nature of th原创 2014-07-11 15:40:06 · 790 阅读 · 0 评论 -
UVA 624 CD 01背包(DP)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N m原创 2014-07-06 10:47:16 · 644 阅读 · 0 评论 -
UVa 10069 Distinct Subsequences(大数+DP)
Distinct SubsequencesA subsequence of a given sequence is just the given sequence with some elements (possibly none) left out. Formally, given a sequence X = x1x2…xm, another sequence Z = z1原创 2014-07-21 14:08:43 · 1138 阅读 · 0 评论 -
UVa 10130 SuperSale(DP_01背包)
很简单的01背包题目 求出每个人可以拿的最大值 加起来就是结果了原创 2014-07-10 08:26:14 · 704 阅读 · 0 评论 -
UVa 147 Dollars(DP完全背包)
Dollars New Zealand currency consists of $100, $50, $20, $10, and $5 notes and $2, $1, 50c, 20c, 10c and 5c coins. Write a program that will determine, for any given amount, in how many wa原创 2014-07-09 21:39:51 · 694 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram(DP)
可以发现 当第i-1个比第i个高的时候 比第i-1个高的所有也一定比第i个高 于是可以用到动态规划的思想令left[i]表示包括i在内比i高的连续序列中最左边一个的编号 right[i]为最右边一个的编号那么有 当h[left[i]-1]>=h[i]]时 left[i]=left[left[i]-1] 从前往后可以递推出left[i] 同理 当h[right[i]+1]>=h[i]]时 right[i]=right[right[i]+1] 从后往前可递推原创 2014-08-05 08:49:55 · 1602 阅读 · 0 评论 -
HDU 1505 City Game(DP)
1506的升级版 只是多了一维 h要自己算 详情看上一篇原创 2014-08-05 12:00:49 · 943 阅读 · 0 评论