
动态规划
文章平均质量分 50
plusplus7
萌系大学生一枚。。。。
展开
-
POJ 1837 Balance
这题弄了好久不知道怎么做。。后来果断去看了Aikilis大神的blog,才知道用DP。。我太弱了。。题意: 有一个天枰,天枰左右两臂长度皆为15,臂上一共有c(c 现在有g(g解法:dp[i][j] 表示,使用前i个砝码,能够使重量到达j的方法数。因为有负数,所以数组的下标可能会小于0,所以给他加一个偏移量mid。 dp[i][j]原创 2012-11-27 00:23:50 · 447 阅读 · 0 评论 -
POJ 3181 Dollar Dayz
dp题,推出方程就好做了。dp[i][j]=dp[i][j-1]+dp[i-j][j]我最开始用c++敲了下,WA了,然后发现结果会超long long,于是果断换java写大数。注意,下面的代码,我手贱把i 和 j 敲反了。。 import java.math.*;import java.util.*;public class Main { /** *原创 2012-11-25 01:46:01 · 538 阅读 · 2 评论 -
SGU 116 Index of super-prime
定义了一种数super prime,数的本身是一个素数,且在素数表里的下标(从1开始)也是一个素数。然后给定一个n,求用最少的superprime相加得到n的方法。 解法,因为数据很小,Number is not more than 10000. 在10000内的super prime也很少,只有201个,所以可以直接本地打表得出。随后就是一个很简单的背包。#includ原创 2012-12-16 20:38:58 · 896 阅读 · 0 评论 -
POJ 3903 Stock Exchange
最长递增序列#include #include #include using namespace std;int tmp[100010],lt;int main(){ int n,i,j,mi,ma,mid,t; while (scanf("%d",&n) != EOF) { lt=0; tmp[lt]=-99999999;原创 2013-01-06 22:43:05 · 486 阅读 · 0 评论 -
POJ 2181 Jumping Cows
给你n个药的序列,牛从时间1开始吃药,在奇数时间吃药可以增加弹跳力,在偶数时间吃药则会减少弹跳力。在某一时间,你可以跳过一些药,但一旦吃过某种药,你就不能在选前面的药了。问你某一个吃药的序列,使牛最终的弹跳力最大。 解法有多种,可以dp,可以贪心。动态规划: dp[i][0] 表示 当拿到第i个药时,之前已经拿了奇数个药的最大弹跳力。 dp[i]原创 2013-01-08 01:02:32 · 1274 阅读 · 0 评论 -
BNUOJ 4140 Video Game Troubles
动态规划问题。方程有很多种。还是NOWCO上面的那个感觉好理解一些。 把每组游戏机提供的游戏,看成是一件物品,对每组内的物品进行01背包,也就是拿和不拿的决策。然后对于n组游戏机,每组游戏机和其提供的游戏组合看成是一件物品进行01背包,也是拿和不拿的决策。 这样就把这个问题给分解了,所有的DP完成了就能得到最优解。 我太弱了啊,,昨晚被这道题一原创 2013-01-09 11:34:45 · 468 阅读 · 0 评论 -
POJ 1948 Triangular Pastures
USACO 2002 February 的一道题题意是,把很多单独的线段重新组合成一个三角形,使得三角形面积最大。所有的线段都必须用上。解法是动态规划。用背包的思路,dp[i][j]为1,表示从这些线段中可以组成一个边长为i,另一边为j的三角形;为0则表示不能。因为周长是一定的,所以dp[i][j]表示一个三角形的边分别是i,j,c-i-j,通过海伦公式就能算出面积。#in原创 2013-01-12 16:57:15 · 887 阅读 · 0 评论 -
POJ 1949 Chores
USACO 2002 February 的一道题 题意是,有很多项工作,每个工作有完成所需的时间,而每一个工作可能会有一些前提工作,前提工作没完成就不能做这项工作。可以有多个工作同时进行。 思路是这样的。完成一项工作必然需要完成其所有的前提工作,因为工作是可以同时进行的,所以我可以再完成前提工作中最晚完成的那项之后,马上开始这项工作,所以这项工作完成的时间就原创 2013-01-12 17:09:14 · 937 阅读 · 0 评论 -
BNUOJ 3869 Buying Hay
完全背包,不过在最优值的选取上稍微有些不同。#include #include #include using namespace std;int dp[56000];int main(){ int n,h,mh,i,j,w[100],v[100]; memset(dp,0x7f,sizeof(dp)); scanf("%d%d",&n,&h); fo原创 2013-01-29 19:56:16 · 521 阅读 · 0 评论 -
POJ 3166 Cow Bowling
水题,经典题,dp题#include #include #include using namespace std;int main(){ int n,i,j,ans; int dp[360][360],mp[360][360]; scanf("%d",&n); for (i=1; i<=n; i++) { for (j=1;原创 2012-12-05 20:18:07 · 498 阅读 · 0 评论 -
POJ 1159 Palindrome
题意:求在一个字符串中插入最少多少个字符可以使得这个字符串变成一个回文串。以前用LCS的解法做过,这次是找出了子结构,然后用动态规划做的。dp[i][j]表示第i个到第j个字符需要插入dp[i][j]个字符能形成回文串,答案就在dp[0][n-1]里,dp数组直接初始化为0就可以了。#include #include #include using namespace std;s原创 2012-12-05 21:57:07 · 370 阅读 · 0 评论 -
POJ 1276 Cash Machine
这是个多重背包问题。。 可以把这个转化成01背包和完全背包的合体来做。做法是枚举每一件物品,如果发现在这件物品的数量乘以价格超过了cash,就可以把这个物品的数量当成无限来做,也就是完全背包。 否则的话,就把这nk[i]件物品拆分成为多件物品,每件物品相对于原先的数量1 , 2 , 4 ,6 ,。。。。。。,2*k件,其中2*k <=nk[i]/2。1-原创 2012-11-27 01:26:56 · 403 阅读 · 0 评论 -
POJ 3184 Finicky Grazers
题意,给你10000个牛的位置,牛之间的距离越远,他的产奶量就越高。FJ是一个很有爱的萌系小骚年,他希望把牛之间的距离安排得尽量远,并且使用的时间最短。 解法,题目中的D很容易能知道是l/(n-1),那么令dp[i][j],i表示放好前i头牛,并把第i头牛放在j位置上所需要的最小时间。 DP方程:dp[i][j]={dp[i-1][k]+abs(p原创 2012-11-29 21:07:29 · 968 阅读 · 0 评论 -
POJ 2241 The Tower of Babylon
额。这是一道DAG上的dp题。题目给出了n种方块,这n种方块都可以翻转,于是总共就有3n种方块,于是可以把问题转化成LIS来处理。我这里偷懒照着白书写了个记忆化搜索。。#include #include #include using namespace std;struct T{ int x; int y; int h;};T m[100],ck[20原创 2012-12-03 14:39:25 · 483 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon
这道题我先读错了题,然后又是推错了方程。。。额。。智商捉急啊。。。。#include #include #include #include using namespace std;char str[320],dic[620][40];int w,l;int main(){ int i,j,t1,t2; int d[320]; scanf("%d%d",&原创 2012-12-03 22:27:55 · 442 阅读 · 0 评论 -
POJ 1836 Alignment
给定一列数,求一个波浪排序。。。其实dp不是难点,正反求一次LIS,LDS就行了。。。这题主要就是为了告诉我们,以后遇到浮点数判断大小一定要记得加eps。。。#include #include #include #define eps 1e-8using namespace std;int main(){ int n,i,j,lis[1200],lds[1200],an原创 2012-12-03 23:13:30 · 407 阅读 · 0 评论 -
POJ 1260 Pearls
题意: The Royal Pearl的高档牌珠宝行采购员准备去进货。给定一个需要的珠宝数量和对应的价格,单位:个,但是js为了不让顾客只买一个珠宝就走,于是js要求买一种珠宝,就需要在其数量上+10= =于是高档牌的采购员为了花更少的钱买到更多的珠宝,便允许用贵一点的珠宝来代替便宜的珠宝。 问你最少花多少钱可以买到足够多的珠宝。思路:原创 2012-12-04 00:23:26 · 620 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence
求最长递增数列的长度。。。O(n^2)的。#include int main(){ int n,i,j,a[2100],dp[2100]; scanf("%d",&n); for (i=0; i<n; i++) { scanf("%d",a+i); dp[i]=1; } dp[2000]=-1; f原创 2012-12-04 00:36:59 · 349 阅读 · 0 评论 -
POJ 1080 Human Gene Functions
这题方程很好想,只是我觉得不太好证明最优子结构。。。智商捉急。。。dp[i][j]=max(dp[i-1][j]+mt[s1[i]]['-'],dp[i][j-1]+mt[s2[j]['-'],dp[i-1][j-1]+mt[s1[i]][s2[j]]);Discuss里面有很好很强大的证明。。。#include #include #include using namespace原创 2012-12-05 21:30:04 · 318 阅读 · 0 评论 -
【博客搬家】本博客已全面停止更新,新博客地址 plusplus7.com
新博客地址:http://www.plusplus7.com原创 2013-11-23 21:24:40 · 1414 阅读 · 0 评论