![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
★★★
文章平均质量分 79
focus_best
这个作者很懒,什么都没留下…
展开
-
POJ2411 状态压缩DP
POJ2411 Mondriaan's Dream给你n*m(1矩阵,要求用1*2的多米诺骨牌去填充,问有多少种填充方法。分析:首先我们定义如下这种填充表示方式:如果一个骨牌是横着放的,那么它所在的两个方格都填充1.如果它是竖着放的,那么它所在的两个格子中,上面的那个填0,下面的这个填1.如下图所示: 由此可以得到断言:该矩阵的骨牌摆放方法和该矩阵的二进制表示法是一一对应的。原创 2014-02-20 20:17:00 · 9685 阅读 · 8 评论 -
POJ2663
POJ2663 Tri Tiling现在给出一个3*n(0分析:解法一:首先这道题n的规模比较小我先试下用轮廓线DP来解。(轮廓线DP见:http://blog.csdn.net/u013480600/article/details/19499899)注意POJ的这道题目测试数据当n==0时输出的是1,否则WA。AC代码:47MS#include#include原创 2014-02-21 11:23:18 · 2278 阅读 · 0 评论 -
POJ3420 递推/状态压缩DP +矩阵幂加速处理
POJ3420 Quad Tiling现在我们有一个4*n(1输入:包含多组实例,每组为n和m(0输出:输出摆放总数对m求余的结果。分析:做本题首先要知道它的基础题型。见:http://blog.csdn.net/u013480600/article/details/19612171这道题由于数据规模很大,且是4*n类型,所以不能用轮廓线DP来解。解法一:递推+矩阵加速原创 2014-02-21 22:52:49 · 2347 阅读 · 1 评论 -
POJ3254
POJ3254Corn Fields有一个n*m的矩阵,这个矩阵以01的形式给出,其中标为1的格子可以选择,标为0的格子不能被选。现在要你在可以选的所有格子中选择一种方案,使得被选的任意两个格子不邻接(即无公共边)。问你共有多少种选择方案?(被你选中的格子总数没有要求,一个格子都不选也可以作为一个方案)输入:第一行为n*m(1输出:方案总数%10^8.分析:本题先假设以行为计算原创 2014-02-22 12:01:37 · 971 阅读 · 0 评论 -
POJ3311
POJ3311 Hie with the Pie给你一个有n+1(1输入:包含多组实例。每个实例第一个为n,然后是n+1行矩阵,每行矩阵有n+1个数字,第i行第j个数字表示从i-1到j-1号点的距离。当输入n=0时表示输入结束。输出:最小距离。分析;本题和经典TSP旅行商问题类似,但是TSP要求每个节点仅走过1次,本题要求每个节点至少走过一次。同样的是本题也用状态压缩DP来解。原创 2014-02-22 17:27:17 · 2162 阅读 · 0 评论 -
POJ1185
POJ1185炮兵阵地司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色原创 2014-02-23 17:59:28 · 1055 阅读 · 1 评论 -
HDU3001
HDU3001Travelling现在有一个具有n个顶点和m条边的无向图(每条边都有一个距离权值),小明可以从任意的顶点出发,他想走过所有的顶点而且要求走的总距离最小,并且他要求过程中走过任何一个点的次数不超过2次。输入:包含多组实例。每个实例第一行为n(1输出:输出他需要走的最短距离,如果不存在这样的路,输出-1.分析: 首先本题的图一定要是一个连通的无向图,否则肯定不存原创 2014-02-24 17:17:10 · 1244 阅读 · 0 评论 -
POJ2288
POJ2288Islands and Bridges现在有n个点和m条边的无向图,每个节点有一个权值vi,我们要求这个图的最优三角哈密顿路,哈密顿路是一条经过所有节点一次的路。最优三角哈密顿路是这么定义的:对于一条哈密顿路c1c2…cn,我们首先令sum = sum(vi),1对于所有存在的哈密顿路,具有最大sum值的那些就是最优三角哈密顿路。输入:首先是T(1输出:输出对应的原创 2014-02-24 22:07:41 · 996 阅读 · 0 评论 -
POJ2411 轮廓线动态规划典型例题
Poj2411 Mondriaan's Dream给出一个n*m的矩形,然后用1*2大小的多米若骨牌去填充n*m的这个矩形,问有多少种填充方法。分析:典型的轮廓线动态规划题目。详见刘汝佳新书:算法竞赛入门经典:训练指南P384.首先本题目是以一个一个的格子为基础来计算状态的,即每次都是考虑当前位置的格子如何放左上骨牌(以当前位置为最右下角,即只不放,左放,和上放3种情况,没有右放和原创 2014-02-19 19:31:43 · 7731 阅读 · 0 评论 -
HDU2817
HDU2817 A sequence of numbers现在有一个由整数组成的序列,可能是等差数列,也可能是等比数列,但是只给出前3个数,要求你求数列中第k个数% 200907的结果。所给数列是一个非递减数列。输入:首先是一个t表示输入的实例个数,以下t行每行代表一个实例。每行包括4个整数,前3个整数在[0, 2^63)范围内,表示数列的头3个数,第4个数是k表示要求的数列中的第k个数。原创 2014-02-14 01:07:08 · 1379 阅读 · 0 评论 -
ZOJ3471
ZOJ3471 Most Powerful有n个原子,任意两个原子互相撞击会产生一定的能量,并且被撞击的那个会消失,然后要你求当n个原子发生了n-1次撞击后能产生的最大能量.输入:包含多组实例.每个实例的第一行是N(2输出:对于每个实例输出能量最大值.分析:本题和TSP问题很相似,使用类似的状态定义方式解即可.令d[i][S]表示当前在原子i且已经用过的原子集合为S(S包括i)原创 2014-02-26 18:36:42 · 987 阅读 · 0 评论 -
POJ1038
POJ1038Bugs Integrated, Inc.现在给你一个N*M的矩阵,然后矩阵有K个坏了的格子,矩阵中黑格子表示坏的格子,要你在所有好的格子中选出尽量多的2*3(或3*2)小矩阵,问你最多能选多少个这样的小矩阵.输入:首先是一个t,(1输出:输出最多能选多少个2*3小矩阵.分析:由题意我们可知假设从上到下开始摆放2*3(或3*2,后文统称为小矩阵)矩阵,那么当我们放原创 2014-02-26 12:19:21 · 2464 阅读 · 1 评论 -
HDU3920
HDU3920 Clear All of Them I现在你在一个大地图上,给出你所在的坐标(x,y),然后给出2*n个敌人的坐标,要你消灭这2*n个敌人.你手上有一把激光枪,每次射击你都可以任意选择两个目标,激光先从你的位置到第一个目标,然后再从第一个目标到第二个目标的位置,这样就消灭了这两个目标,激光枪消耗的能量是它总共走过的距离.你可以选择先攻击哪个目标.你的位置不可以变.每原创 2014-02-28 12:42:10 · 825 阅读 · 0 评论 -
HDU3681
HDU3681 Prison Break一个机器人身处N*M的矩阵中,它想要越狱逃出来,这个矩阵由N行M列的字符组成,含义如下:(1) S表示空格子(2) F表示机器人的起始位置(3) G表示能量池,对于同一个能量池只能使用一次,且经过能量池的时候可以选择用或者不用,用的话能量就会变满.(4) D表示坏格子,机器人不能走D格子(5) Y表示开关格子,机器人必须把所有开关格子原创 2014-02-27 18:51:54 · 1173 阅读 · 2 评论 -
HDU4026
HDU4026Unlock the Cell Phone现代手机都有解锁模式,比如在一个3*3的键盘上,你可以选定一个起始点,点上去然后滑动到它相邻的点上。比如起始为1可以滑动到2,4,5,6,8上,因为1到这些点之间都没有其他点。但是你不能直接从1滑动到7或3,因为2或4你还没走过。当你走到了一个点之后,你就能从它上面划过去了。如下面第3个图1->5->9->6->4,因为5已经走过了,所以原创 2014-03-01 12:46:16 · 951 阅读 · 0 评论 -
HDU2167
HDU2167Pebbles给你一个N*N(3分析:第i行怎么取只和第i-1行的取法有关,令d[i][S]表示第i行的取法是S时能取得最大数之和.d[i][S]=max{d[i-1][S1] + get_v(i,S)} 其中S1和S是兼容的,get_v(i,S)得到的是第i行为状态S时从第i行能获得的数总和.初值:d[0][S]=x,S表示第0行的所有合法状态.其他d初始化为-1,原创 2014-03-01 18:58:32 · 864 阅读 · 0 评论 -
HDU1693
HDU1693Eat the Trees给你一个N*M的矩阵,矩阵中有好格子和坏格子,坏格子不能走,问你能找出多少种方法在这个矩阵中画规则的圈(可以有多个圈).输入:首先是一个T(1输出:以 Case 1: There are 3 ways to eat the trees.这种形式输出结果.保证结果不超过int的上限.分析:此题就是URAL1519的变形,不过这题可以允许有多个圈原创 2014-03-03 16:42:58 · 930 阅读 · 0 评论 -
FZU1977
FZU1977 Pandora adventure依然是一个N*M的矩阵,但是矩阵中有3种格子,第一种必走的格子(必须走1次),第二种不走的格子(不能走),第三种可选格子(可以选择走还是不走),现在要你求一共有多少种方式走一个规则圈,包括了所有必走的格子,不含不走的格子,可以选择包括可选格子.输入:首先是T (T≤100)表示实例个数.接下来每个实例第一行为N和M(1≤N, M≤12),然原创 2014-03-04 00:45:27 · 933 阅读 · 0 评论 -
HDU1964
HDU1964 PIPES现在给你一个矩阵,矩阵中都是好格,要你求一条代价最小的回路,这条回路走过了矩阵的所有格子仅一次。任意两个相邻的矩阵格子之间有费用(0到9的一个整数)。如上面这个4*3的矩阵,空白的地方表示的是矩阵必须要行走的格子,所有数字的地方表示的是矩阵两个相邻格子之间行走的花费,#的地方是没有路也没格子的。输入:第一个数字的T,表示实例个数。接下来每个实例,第一行是r原创 2014-03-04 11:35:22 · 891 阅读 · 0 评论 -
HDU3377
HDU3377 Plan现在给你一个N*M的矩阵,矩阵每个格子都有一个分数,现在要求你从矩阵左上角走到矩阵右下角去能获得的最大分数。输入:包含多组实例。每个实例首先是一行N和M,然后是这个矩阵,矩阵中的每个分数在[-2000,2000]内。输出:从左上角走到右下角的最大分数。分析:除了左上角和右下角外其他格子都是可选择的,不能构成一个圈。我们在这N*M的矩阵上再加一行一列(加第一行原创 2014-03-04 19:04:45 · 1279 阅读 · 0 评论 -
POJ1739
POJ1739 Tony's Tour现在有一个N*M(1输入:输入包含多组实例。每个实例的第一行为N和M,接下来是一个N*M的字符矩阵,其中‘#’表示障碍格,‘.‘表示好格。以一行0 0表示输入结束。输出:输出有多少种行走方法。分析:插头DP问题,且和HDU3377很类似:http://blog.csdn.net/u013480600/article/details/2047原创 2014-03-05 16:05:06 · 901 阅读 · 0 评论 -
URAL1519
ural1519formula 1给你一个n*m的矩阵,矩阵中有一些格子是坏的,现在要你在矩阵中画一个环,这个环要经过矩阵中所有好的格子一次,问你有多少种画法.分析:典型的插头dp问题,详见cdq的论文>,这里我用的一般解法做的,一般解法速度没有特殊括号表示法快,但是通用性很好.AC代码:328ms#include#include#includeusing names原创 2014-03-03 13:41:39 · 1042 阅读 · 0 评论 -
POJ3133
POJ3133 Manhattan Wiring现在有一个N*M(2输入:包含多组实例。每个实例第一行为N和M,然后是数字矩阵。输入以0和0结束。输出:输出最小的短长度,如果不存在这样的两条线,就输出0.分析:插头DP问题,只要按常规的插头DP问题来处理即可,但是要分别特殊处理2和3格子,然后用f[]记录最小长度即可。插头只有3种,0插头(表示无),2插头和3插头。会不会出现4原创 2014-03-05 21:36:16 · 1215 阅读 · 0 评论 -
ZOJ3466
ZOJ3466 The Hive II 有一个N行8列的蜂窝,有一些格子里有蜜蜂,有些没有,现在要你在这个蜂窝里找几条回路使得这些回路里的格子正好有蜂蜜,且所有格子都在一个回路里,问你有多少种方法找到这些回路。蜂窝里的小网格用两个大写字母标记其坐标.如下图:输入:包含多组实例。每个实例第一行是N(0 输出:输出构成这些回路的方法数,保证结果在int范围内。分析:原创 2014-03-06 17:16:05 · 864 阅读 · 0 评论 -
ZOJ 3256
ZOJ 3256 Tour in the Castle现在给你一个N*M的矩阵,要求你从左上角走到左下角,且矩阵中的每个格子都要走仅1次,问你有多少种走法,输出对7777777求余之后的结果。输入:包含最多19组实例。每个实例一行,为N和M (2 输出:输出路线总数%7777777的结果。分析:假设现在有一个4*4的矩阵如下图:1,1原创 2014-03-07 13:48:11 · 912 阅读 · 0 评论 -
ZOJ 3213
ZOJ 3213 Beautiful Meadow现在有一个N*M矩阵,你走在矩阵上的好格可以获得上面的分数,坏格子不能走且分数为0.现在你可以从矩阵上的任何一个好格子出发,然后在矩阵中任何一个好格子结束,搜集分数,且每个格子只能走一次.问你最多能得到多少分.输入:首先是一个T (1 输出:输出最大分数.分析:增加标记位标记当前状态中独立插头已经有几个了,最多只能有2个.如果该原创 2014-03-07 20:48:03 · 1014 阅读 · 0 评论 -
HDU 4285
HDU 4285 circuits给你一个N*M的矩阵,矩阵有好格子和坏格子,要求你求一共有多少种情况使得K条回路包括了所有的好格子,但是回路不能嵌套.输入:首先是一个T,表示输入实例个数.对于每个实例,第一行是N,M和K (2 输出:ans%1000000007分析:依然是插头DP,只需要考虑当前格子的插头轮廓线状态集合.当插头状态为112233,时,1和1,2和2,3和3可原创 2014-03-07 23:19:26 · 1156 阅读 · 0 评论 -
HDU 2871 Memory Control(线段树:区间合并)
HDU 2871 Memory Control(线段树:区间合并)http://acm.hdu.edu.cn/showproblem.php?pid=2871分析: 首先分析题目中能进行的几种操作:1. Reset: 所有内存单元置02. New x:申请一块包含连续x个单元的空闲内存块3. Freex: 释放包含x号单元的(已被占用)内存块原创 2014-03-29 16:43:31 · 1028 阅读 · 0 评论 -
HDU 2955 Robberies(DP:01背包)
HDU 2955 Robberies(DP:01背包)题意:给你一个被抓的概率P,要求去抢银行的被抓概率要小于P,每个银行有一个价值和一个被抓概率Pi,问你在被抓概率的前提下,能获得的最大价值.分析:由于各个银行的被抓概率独立,所以要用独立概率的乘法计算总的被抓概率. 假设抢了1,2,3银行,被抓概率分布为P1,P2,P3.那么总的被抓概率是:1-(1-P1)*(1-P2)*(1-P3).原创 2014-04-02 13:35:18 · 677 阅读 · 0 评论 -
POJ 2184 Cow Exhibition(DP:01背包)
POJ 2184 Cow Exhibition(DP:01背包)http://poj.org/problem?id=2184题目:每头牛有一个S值和F值,现在要求你在N头牛里面选牛,使得被选牛的S值总和SS ,加上F值总和FF,即SS+FF最大.并且SS>=0且FF>=0.问你那个最大值是多少?分析:二维价值最大问题转化为一维价值最大问题.现在暂且加上所有S值都为正数,那么我们令d原创 2014-04-02 22:33:20 · 885 阅读 · 0 评论 -
HDU 2639 Bone Collector II(DP:01背包)
HDU 2639 Bone Collector II(DP:01背包)http://acm.hdu.edu.cn/showproblem.php?pid=2639题意:同样有N个物品,每个物品有weight和value,问你在总重量不超过W的情况下,使得value值尽量大.得到的第K大的value值是多少?分析: 首先我们令dp[i][Wx][k]=y表示决策完前i个物原创 2014-04-03 00:22:25 · 858 阅读 · 0 评论 -
HDU 4182 Judges' response(01背包+TSP状态压缩DP)
HDU 4182 Judges' response(01背包+TSP)http://acm.hdu.edu.cn/showproblem.php?pid=4281题意:本题有两问:首先是有n-1个物品,每个物品一个重量w,然后每个人有一个重量上限M,问你最小需要派几个人才能收集完所有物品.第二问是:人和所有物品都有一个初始坐标,且人数无限制,在第一问的基础上,不超过人的负重的情况下,要原创 2014-04-03 23:17:51 · 1087 阅读 · 0 评论 -
POJ 2923 Relocation(状态压缩DP+DP:01背包)
POJ 2923 Relocation(状态压缩DP+DP:01背包)http://poj.org/problem?id=2923题意:有N件物品和两辆车,每辆车有个重量上限,现在要搬家且每次从老家到新家都是两车同时出动,问你至少需要多少次能搬完?分析: 首先本题先要求出所有物品合法的组合,即两车能一次装下的物品组合,然后在利用状态压缩DP求解. 首先对原创 2014-04-03 12:02:21 · 1153 阅读 · 0 评论 -
UVA11922 Permutation Transformer(SplayTree)
UVA11922 Permutation Transformer(SplayTree)题意:你的任务是根据m条指令修改排列1,2,3…n.对于每条指令a和b,你必须把第a到b区间内的数翻转之后添加到排列尾部.最后输出整个排列即可.分析:刘汝佳:训练指南P242例题. 直接建立Splay Tree,然后对排列执行操作即可.不过要注意split操作的k值不能为空,所以如果我原创 2014-04-24 17:42:14 · 1335 阅读 · 0 评论 -
HDU 1890 Robotic Sort(SplayTree)
HDU 1890 Robotic Sort(SplayTree)http://acm.hdu.edu.cn/showproblem.php?pid=1890题意:给你N个数,要你执行一系列(题目要求的)翻转操作,使得这N个数按升序排列.要你输出翻转的区间右端点.而且还需要稳定的排序方式.分析:假设一棵SplayTree树有n个房间.现在我们将1到n个数放入这n个房间:表示初始的第1原创 2014-04-26 01:36:51 · 917 阅读 · 0 评论 -
[NOI2005]维修数列(SplayTree)
[NOI2005]维修数列(SplayTree)http://www.cnblogs.com/kuangbin/archive/2013/04/21/3034081.html分析:本题看起来复杂,其实和之前做的SplayTree基本一样就是多了个维护最大连续和的.最大连续和维护需要最大前缀和lx和最大后缀和rx.(与之前的线段树维护最大连续和基本一样)具体实现看代码.注意:se原创 2014-04-28 00:09:18 · 893 阅读 · 0 评论 -
POJ 3580 SuperMemo(SplayTree)
POJ 3580 SuperMemo(SplayTree)http://poj.org/problem?id=3580题意:要求你维护一个数列,完成下面6种操作,区间加,区间翻转,区间循环移位,插入,删除,区间求最小值.分析:除了循环移位外,其他都是SplayTree的基本操作,现在来考虑循环移位.区间[l,r]循环右移T(T=T%(r-l+1) )位,等于把区间[l,r-T]和区原创 2014-04-27 16:00:31 · 814 阅读 · 0 评论 -
HDU 3436 Queue-jumpers(SplayTree+离散化)
HDU 3436 Queue-jumpers(SplayTree+离散化)http://acm.hdu.edu.cn/showproblem.php?pid=3436题意:初始排列1到N,现在要你实现3种操作:将x插入换到队头去,询问x当前的位置,已经询问第x个位置上当前是谁.分析:下面用SplayTree来实现.不过依然要明白SplayTree提供的是N个房间,第i号房间里放原创 2014-04-27 01:10:33 · 912 阅读 · 0 评论 -
[AHOI2006]editor (SplayTree)
[AHOI2006]editor (SplayTree)分析:都是基本的SplayTree操作,可以根据前一道题的代码构建这道题的函数. * 六种操作 * Move k : 将光标移到到第k个字符之后,k=0则移到到最前面 * Insert nS :在光标后插入长度为n的字符串S * Delete n :删除光标后的n个字符 * Rotate n:反转光标后的n个字符原创 2014-04-27 18:26:30 · 695 阅读 · 0 评论 -
POJ 1201 Intervals(差分约束)
POJ 1201 Intervals(差分约束)http://poj.org/problem?id=1201题意:有n个如下形式的条件:ai bi ci,表示在区间[ai, bi]内至少要选择ci个整数点.问你满足n个条件的情况下,最少需要选多少个点?分析: 令s[x]表示从区间[0,x]中选择的整数点个数.那么对于条件[ai, bi]选数>=ci个,就是 s[原创 2014-07-18 10:17:14 · 5050 阅读 · 2 评论