
动态规划
zdsfwy
这个作者很懒,什么都没留下…
展开
-
HDU 2191
看似很水的题儿,也要做出水平来。下面给出四个程序:用了两种不同的状态表示,以及每个状态表示用了两种不同的记录方法。(注,由于这题的数据很弱:即对于每个case,钱都是可以全部花完的。所以我拿一些错误的算法上去也过了)一、①状态dp[i][j]表示为装入前i个物品,容量还剩j的情况。②只将最开始的状态赋值为0,其他赋值为-1(表示是不合法状态)#include #include #include using namespace std;struct Mi{int p, h, c;};Mi mi[101];in原创 2011-03-29 10:08:00 · 1457 阅读 · 0 评论 -
ZOJ 3077
开始直接背包,显然错了。。然后看了报告,说要按b降序排序。才发现这个顺序也有关系的:比如我先拿了A,就不能再拿B了。而先拿B的话,就肯能再拿A。显然后面的情况更优。于是我也降序排了,发现还是错。我是这么写的:滚动数组;状态表示是类似“将前i个物品放进j的空间”。于是递推的时候就写成这样:for(int i = s; i >=b; i--) {dp[i-a+b] = max(dp[i-a]+v, dp[i-a]); //a>b}终于无力的发现这么连滚动数组都写错了 T_T那我就不滚动了,于是又这么写:for原创 2011-03-29 15:08:00 · 965 阅读 · 0 评论 -
ZOJ 3305 集合上的动态规划
<br /> <br /> <br />子集的枚举: “<br /> for(int s = mask ; s ; s = (mask&(s-1))) ”<br /> <br />不过可别忘了这里枚举到s就退出了,所以要把s为0的情况补上。<br /> <br />当然也可以用记忆化方法递归求解~~~ 有时间补上。<br /> <br />#include <cstdio> #include <cstring> #include <algorithm> #include <map>原创 2011-03-30 20:04:00 · 914 阅读 · 0 评论 -
最长公共子串 UVA 10405
<br />根据算法导论的逐步介绍,于是有了这3个版本的代码。<br /> <br />************这是递推版本*************<br />#include <stdio.h> #include <string.h> #define MAXN 1000 char a[MAXN+5], b[MAXN+5]; int dp[MAXN+5][MAXN+5]; //first dimension is a int main(int argc, char* argv[])原创 2011-03-30 21:40:00 · 456 阅读 · 0 评论 -
ZOJ 3077 记忆化动态规划
<br />记忆化搜索是什么?很熟悉的名字~~<br />如果是指动态规划的记忆化方法的话就感觉很不合适了,那哪是搜索啊 —_—<br /> <br />这题其实很水,昨天早上写好,但是到昨天晚上了还没交掉。<br />一直WA,把标程都哪来对拍了,排得我的电脑都烂了,还是没拍出错误来。<br />(对拍也是很烦的事情,因为要生成测试数据,这个一般情况下都不好生成啊~~)<br />晚上睡觉前一看,发现浮点数输出直接“#什么NAN”了。一看初始化,竟然用memset给double类型的赋值了。—_—<br原创 2011-04-01 21:13:00 · 663 阅读 · 0 评论 -
动态规划的一些思考
一、初始化问题如何初始化? 这个问题,其实就等同于:该对哪些子问题进行适当的标记。拿01背包问题来说。如果状态表示为将前i个物品放进容量为j的背包中。①如果要求出背包装满情况下的最大值的话,那么在其最终的子问题中,只有将0个物品装到容量为0的背包中是可以供原问题是用的(如果可以将0个物体装到容量不为0的空间中的话,那这块空间就空了,不合题意)。为了避免依赖于这些我们认为不合法状态的解进入最终最优解的备选集合。我们将这些不合法的状态赋一个值,使依赖这个状态的解肯定不会被我们选中为最优解即可。通常的手段有:如果原创 2011-04-08 16:05:00 · 632 阅读 · 0 评论 -
ZOJ - 3211 Dream City
<br />这个其实是个背包问题,把日期看成背包的容量。然后n棵树当成n个物品。<br />只是在开gao之前要先预处理一下。<br />假设我们取得由某m棵树组成的最优解。如果先砍的树的b值比后砍的树的b值大,那么我们总能交换这两树砍的顺序而得到更多的钱。所以我们按增加钱币量b值升序将n棵树排序。之后就能gao出来了。<br /> <br /> <br />(看来对于物品放置的顺序是随意的 & 物品的value会变的背包总会蕴含那么些贪心性质的东西)^_^<br />#include <cstdio>原创 2011-04-08 23:59:00 · 1354 阅读 · 3 评论 -
ZOJ - 2972 Hurdles of 110m
<br /> 背包问题的变形~~<br />想法很直观,但是我WA了很多次。但是一改状态表示就立马A了。其实不是状态表示的问题,而是在递推的时候出现了问题。由此我得出状态表示的选择也是有学问的。所以就写了那篇 《动态规划思考》 啦~~~<br /> <br />先贴上感觉最简洁直观的代码:(状态表示为跨完前i个栏后,剩余的力量)<br /> <br />#include <cstdio> #include <algorithm> #define MAXN 110 #define min(a, b) (原创 2011-04-09 18:54:00 · 1106 阅读 · 0 评论