动态规划
花酱_
这个作者很懒,什么都没留下…
展开
-
最长不降奇偶交替子列 bjfu1028 最长有序子序列
描述一个序列中选择其中的若干个,保持以前顺序生成的新的序列称为原序列的子列,如果子列中每相邻两个元素的奇偶性交替出现,则称这个子列为奇偶交替子列。你的任务是:对于给定的序列, 计算出其最长单调不降奇偶交替子列的长度。输入输入的第1行是一个整数n,在[1, 20]之间,表示测试用例的数量。对于每一个测试用例, 第一行是一个整数mi,表示该测试用例序列中数据的数量,在[2, 200]中原创 2013-01-23 16:53:04 · 732 阅读 · 0 评论 -
I NEED A OFFER! hdu1203 01背包,概率
http://acm.hdu.edu.cn/showproblem.php?pid=1203这是一个掺和着概率的01背包,对我这种智商不足的人~ 0,0max_prob[i]表示花费i元没拿到一份简历的概率。则至少一份的最大值就等于1减去一分也没拿到的最小值。#include using namespace std;#define N 10005int money[N];原创 2013-01-22 17:01:35 · 366 阅读 · 0 评论 -
Piggy-Bank hdu1114 完全背包
http://acm.hdu.edu.cn/showproblem.php?pid=1114题意大致是:一个可以放V这么大的钱罐,往里面放n种钱,如果放不满则输出impossible,否则输出价值最小情况。这个算法使用一维数组: for (i=1;i{ for (j=c[i];j}01背包:因为要保证第 i次循环中的状态 s[i][j]是由状态s[原创 2013-01-21 13:38:36 · 389 阅读 · 0 评论 -
最少拦截系统 hdu 1257 最长有序子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1257对于这个题目的测试例的解释:当8枚导弹依次飞来时,对于前三枚导弹(300,207,155),用第一套系统即可拦截,每一次更新记录,即:对第一枚导弹直接拦截,第二枚导弹来临时也用第一套系统拦截,记录改变成207,当用第一套系统拦截第三枚后记录修改为155,当第四枚导弹来时按照系统规定,第一套系统无法实现对原创 2013-01-18 10:21:05 · 386 阅读 · 0 评论 -
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 hdu2191 多重背包
http://acm.hdu.edu.cn/showproblem.php?pid=2191这是个典型的多重背包,给了总钱数, 每种大米的价格、重量、袋数。求能够购买的最大重量。这个是从别的地方copy来的简单背包问题的讲解:先说下 01 背包,有n 种不同的物品,每个物品有两个属性 size 体积,value 价值,现在给一个容量为 w 的背包,问最多可带走多少价值的物品。原创 2013-01-21 14:37:37 · 782 阅读 · 0 评论 -
Robberies hdu2955 01背包
http://acm.hdu.edu.cn/showproblem.php?pid=2955这个题~,坑害了我好久好久。……题目大意:一个人要去抢银行,给出每个银行的总钱数和被抓概率。求在一定被抓概率内,能偷到的最大钱数。每个银行抢案之间是相互独立的。用max_survive[i]表示在抢到i万元时不被抓的最大概率。症结点:for (i=1;ifor (j=max_mone原创 2013-01-22 15:31:07 · 333 阅读 · 0 评论 -
Ahui Writes Word hdu3732 多重背包
http://acm.hdu.edu.cn/showproblem.php?pid=3732好长时间没写题了。。从前辈的博客里抄来的。。/从题意上看明显是01背包,但是如果用01背包做肯定会超时,仔细看了下数据,每个单词的价值和复杂度只有0到10,最多有11*11种情况,所有可以看成是多重背包问题,用二维数组t来记录个数**/自己的代码。/* * hdu3732.cp原创 2013-04-12 22:37:00 · 510 阅读 · 0 评论 -
Max Sum hdu1003 最大子段和
http://acm.hdu.edu.cn/showproblem.php?pid=1003题意:给一串数,求最大子段和,并且记录最靠前的子段的起点和终点。套公式就可以啦。=w=#include using namespace std;#define N 100005int a[N],f[N],b[N];int main(){#ifndef ONLINE_JUDGE fr原创 2013-01-24 10:38:59 · 397 阅读 · 0 评论 -
FatMouse's Speed hdu1160 最长有序子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1160用sort函数对weight排序,然后用最长有序子序列的求法,求speed的递增序列。一开始第提交出现WA是因为ONLINE写错了,万恶啊。。#include #include using namespace std;#define N 1005struct mouse_node{原创 2013-01-23 15:56:38 · 763 阅读 · 0 评论 -
Big Event in HDU hdu1171 多重背包
http://acm.hdu.edu.cn/showproblem.php?pid=1171这个问题首先由最大价值除以2,求出B理论可以达到的最大价值。然后应用多重背包的方法求出B实际可以达到的最大价值,然后A的价值为总价值减去B。#include using namespace std;#define NI 105*50#define NVALUE 1005*55*105原创 2013-01-22 11:25:40 · 327 阅读 · 0 评论 -
最长有序子序列。
动态规划使用范围:任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。 1.最优化原理(最优子结构性质) 最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问转载 2013-01-23 14:03:23 · 813 阅读 · 0 评论 -
Greatest Common Increasing Subsequence hdu1423 最长公共递增子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1423下面是从前辈那里copy来的最长公共递增子序列的详解。给出两个序列a和b,求序列的最长公共递增子序列例如 a:1,4,2,5,-12 b:-12,1,2,4,最长的公共递增子序列是2(序列为2,4)。解决方案:用一个二维数组f[i][j]表示a序列的前i项,b序列的前j项,并原创 2013-01-24 17:52:40 · 800 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping! hdu1087 最长有序子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1087题意:从START跳往END,只能前进不能后退,而且只能跳到比当前点的分数大的点。求从START到END能获得的最大分数。运用最长有序子序列的思想,稍稍改动下就可以咯。#include using namespace std;#define N 1003int a[N],f[N];原创 2013-01-23 21:01:21 · 451 阅读 · 0 评论 -
Common Subsequence hdu1159 最长公共子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1159=w=, 套公式就行啦。#include #include using namespace std;#define N 10005char a[N],b[N];int c[N][N];int max(int a,int b){ return a>=b?a:b;}int main原创 2013-01-23 16:19:51 · 331 阅读 · 0 评论 -
悼念512汶川大地震遇难同胞——来生一起走 hdu2189 动态规划
http://acm.hdu.edu.cn/showproblem.php?pid=2189用数组group[i][j]表示共i个人,以第j个素数为最大分组人数时,共有多少种分组情况。则group[i][j]=sum(group[i-prime[j][k]) ,其中0#include using namespace std;#define N 155#define M 36b原创 2013-01-28 15:26:49 · 406 阅读 · 0 评论 -
Bone Collector hdu2602 01背包
http://acm.hdu.edu.cn/showproblem.php?pid=2602这个题是个非常非常非常典型的01背包,木有任何弯弯。。#include using namespace std;#define N 1005int value[N],weight[N],sum[N];int max(int a,int b){ return a>=b?a:b;}in原创 2013-01-22 11:48:44 · 388 阅读 · 0 评论 -
饭卡 hdu2546 背包问题
http://acm.hdu.edu.cn/showproblem.php?pid=2546嗯~ 头一回成功的自己完成背包的题目,嘿嘿。很开心。设s[i][j]为容量为j时i件物品的最大价值。c[i]为第i件物品的体积,w[i]为第i件物品的价值。for (i=1;i{ for (j=0;j for (j=c[i];j}第一次写我就套了公式嘛原创 2013-01-21 10:25:38 · 884 阅读 · 0 评论 -
难解的问题 bjfu1139 动态规划
描述这是《仙剑》里的一个不为人知的故事。有一天,某英想要向璃儿表白。但是聪明的璃儿早已想到了这一点,于是事先设下了很多看不见的墙。按照某种特定的规则,有唯一的走法可以到达璃儿面前。如果不按照规则走,就会撞墙。同时,璃儿也给了他一些提示。这些提示可以表示成一个n*n的方阵,如图:一开始,某英位于左上角,即第1行第1列,璃儿位于右下角,即第n行第n列。某英必须按照规则走。规原创 2013-01-19 14:27:05 · 368 阅读 · 0 评论 -
免费馅饼 hdu1176 动态规划 数塔
http://acm.hdu.edu.cn/showproblem.php?pid=1176数塔问题的描述:9 12 15 10 6 8 2 18 9 5 19 7 10 4 16 有形如图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走, 一直走到底层,要求找出一条路径,使路径上的值最大。 这道题如果用枚举法,在数塔层数稍大的情况下(如40),则原创 2013-01-18 14:15:10 · 552 阅读 · 0 评论 -
数兔子 bjfu 1144 动态规划
描述已知每只兔子从出生开始计算的第x年后开始每年年初生仔,每年产仔y只,直到其死亡,每只兔子的生存周期为n年,会死于第n年的年终,第一年年初农场里只有一只新生的小兔子,求第m年农场中有多少只兔子。输入有多组数据,每组数据包含四个正整数,x,y,n,m,范围均为[0,50000],且x输出对于每组数据输出,一个整数,独占一行,为第m年时农场中的兔子总数,结果对10007取原创 2012-12-06 22:14:31 · 420 阅读 · 0 评论 -
最大报销额 hdu1864 01背包
http://acm.hdu.edu.cn/showproblem.php?pid=1864最初WA是以为单项指的是每一个商品价格不得超过600块,其实应该是ABC类中每类的价格不得超过600块。还有一次WA是因为value数组开的略大,memset狠容易就超时了。这个题把价格乘以100,用01背包来解决。#include using namespace std;#defi原创 2013-02-02 18:51:43 · 507 阅读 · 0 评论 -
最长公共子序列 bjfu1003 动态规划
描述ben和mei在做一个项目。现在他们遇到了一个难题,需要你的帮助。问题可以抽象为,给定两个整型数串,求它们的最长公共子序列。最长公共子序列的定义是,一个数列 S ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。输入输入包含多组测试数据,每组数据首先包含一个N和一个M,分别表示两个整型串的长度,接下来是两行数据,分原创 2013-01-19 16:41:45 · 394 阅读 · 0 评论