2011年3月26日

枚举子结构得到最优解的动态规划问题

摘要: 当子问题的数量不多时,通常我们能够比较清晰地求出最优解的结构,然后理清各种状态之间转移的过程。但是,如果一个动态规划拥有多个子结构时,我们往往会觉得无从下手,面对这种情况,我们可以考虑下枚举子结构,然后得到动态规划的最优解。而且,有时候我们在枚举子结构时,还要运用另外一些最优结构。我们看看下面几个例子。1.hdoj 1584 蜘蛛牌我们定义dp[i][j]表示从牌的大小为i到牌的大小为j这一串牌,通过移动得到满足条件的一堆牌的最小步数。对于牌1来说,他必须移到到2的上面,但是我们不知道,当他移到2位置上时2到底在哪,所以我们可以枚举2的位置。这样我们就得到了状态转移方程:dp[1][10] = 阅读全文
posted @ 2011-03-26 19:45 CrazyAC 阅读(769) 评论(0) 推荐(0) 编辑

搜索一个是n倍数的大数,bfs

摘要: hdoj 1226 超级密码求一个大数,满足是n的倍数,但是长度不超过500位。一开始以为搜索的状态有m^500,觉得无从下手。其实我们可以运用同模定理,所以状态最多是n,从0到n-1。还有这里要保存路径,所以用数组来模拟队列,每个节点记录他父亲节点在数组队列中的下标值。总结:1.大数问题,特别是涉及到倍数方面的,考虑下取模运算。 2.bfs搜索求路径时,用数组模拟队列取代queue。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using na 阅读全文
posted @ 2011-03-26 14:13 CrazyAC 阅读(276) 评论(0) 推荐(0) 编辑