欢迎访问我的个人网站==》 jiashubing.cn

随笔分类 -  算法_状态压缩

摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1563题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法Sample Input3 33 100 0Sample Output228分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:http://www.cnblogs.com/acm-bingzi/p/3289994.html 但是不能照搬这道题目的方法,3^9约等于20000,两次循环的话会超时,所以每次只找符合条件的状态。 每个格子有三种状态0,1,2,.. 阅读全文
posted @ 2013-10-05 22:43 贾树丙 阅读(364) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681前些天花时间看到的题目,但写出不来,弱弱的放弃了。没想到现在学弟居然写出这种代码来,大吃一惊附加敬仰之情。这里借用下他的成果,好好学习吧,骚年***Sample Input5 5GDDSSSSSFSSYGYSSGSYSSSYSS0 0Sample Output4题意:给出矩阵(作为监狱)和在监狱中的一个装有电池的机器人,其中F为出发点,图中只有一个,且初始状态下机器人在此处电池为满电量;D为障碍物,不可走;S为空格子,机器可自由通过;G为充电点,只能充电一次,且一次能充满电池,经过G可作为S不 阅读全文
posted @ 2013-09-09 03:45 贾树丙 阅读(489) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3920题目大意:你在一个位置用激光枪灭敌人,给你初始位置,下面是2*n个敌人的位置,你一枪能杀两个,可以杀死任意两个人,激光束的路径是消耗的能量,求最小能量,保证一次只消灭两个敌人,你的位置不变Sample Input20 0 1 6 0 3 00 0 2 1 0 2 1 -1 0 -2 0Sample OutputCase #1: 6.00 Case #2: 4.41分析:给每个点编个号,用状态压缩表示射击那些点,射击过的表示为1,dp[i]表示射击状态 i 时最少消耗,答案即为dp[(1 2 # 阅读全文
posted @ 2013-09-04 02:26 贾树丙 阅读(302) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3254题目大意:Farmer John 放牧cow,有些草地上的草是不能吃的,用0表示,然后规定两头牛不能相邻放牧。问你有多少种放牧方法。Sample Input2 31 1 10 1 0Sample Output9分析:对于这种二维地图型,一般设状态dp[i][j]表示第 i 行第 j 状态达到要求的总数 输入地图,用map[i]表示第 i 行中的状态。为了是sta[k]表示可行状态更加方便,map[i]中用0表示可放牧,1表示不可放牧,这样如果(sta[k]&map[i]==0)则说明满足放牧要求。 动态规划:初始化: 阅读全文
posted @ 2013-09-04 01:21 贾树丙 阅读(286) 评论(0) 推荐(0) 编辑
摘要:例题:最优配对问题 空间里有n个点P0,P1,...,Pn-1,你的任务是把他们配成n/2对(n是偶数),使得每个点恰好在一个点对中。所有点对中两点的距离之和应尽量小。n<=20,|xi|,|yi|,|zi|<=1000. 样例输入: 201 2 31 1 15 6 24 7 82 3 11 4 7 阅读全文
posted @ 2013-09-02 08:50 贾树丙 阅读(567) 评论(0) 推荐(1) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3442题目大意:三国时期,刘备逃亡。给定一个最大为50*50的地图,刘备在地图中只能往4个方向走。 地图中,A代表瞭望塔,攻击范围是2,攻击伤害是1; B 代表堡垒,攻击范围是3,攻击伤害是2; C 代表火焰,对于走在该位置上的单位造成3点伤害; D 代表弓箭手,攻击范围是2,攻击伤害是4; E 代表士兵,攻击范围是1,攻击伤害是5; $ 代表刘备; !代表目的地; # 代表障碍物 . 代表地板刘备不能穿过A,B,D,E。但是可以走上C和地板。 有3条重要规则:1.刘备不能被相同的... 阅读全文
posted @ 2013-08-31 23:14 贾树丙 阅读(369) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809题目大意:给出战神吕布的初始攻击力ATI、防御力DEF、生命值HP、每升一级增加的攻击力In_ATI,增加的防御力In_DEF和增加的生命值In_HP。然后给出n个敌人的攻击力、防御力、生命值和杀死该单位能获得的经验值EXP。 吕布的初始经验值EXP是0,初始等级level是1,每当EXP>=level*100时就会升级。 在吕布LvBu和敌人A之间的战斗有3条规则 1.吕布攻击A,A失去Max(1,LvBu's ATI- A's DEF) HP; 2.A攻击吕布,吕布失 阅读全文
posted @ 2013-08-30 21:47 贾树丙 阅读(529) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://poj.org/problem?id=3311题目大意:一个送披萨的,每次送外卖不超过10个地方,给你这些地方之间的时间,求送完外卖回到店里的总时间最小。Sample Input30 1 10 101 0 1 210 1 0 1010 2 10 00Sample Output8分析:dp[i][j]:表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间,转移方程:dp[i][j]=min(dp[i][k]+d[k][j],dp[i][j]) d[k][j]是k城市到j城市的最短距离,显然要先用flody处理一下。代码如下: 1 # include 2 # 阅读全文
posted @ 2013-08-29 21:58 贾树丙 阅读(380) 评论(0) 推荐(0) 编辑
摘要:Mondriaan's DreamProblem DescriptionSquares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he 阅读全文
posted @ 2013-08-29 19:07 贾树丙 阅读(628) 评论(0) 推荐(0) 编辑
摘要:使用Pascal的OIers简要介绍一下C/C++样式的位运算(bitwise operation)。其优先级:not>and>xor>or 使用Pascal的OIers简要介绍一下C/C++样式的位运算(bitwise operation)。其优先级:not>and>xor>or 名称 C/C++ 阅读全文
posted @ 2013-08-29 18:11 贾树丙 阅读(275) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257题目大意:有 n(2 2 # include 3 const int N = (1<<10); 4 int A[11][11],dp[N]; 5 6 int main(){ 7 int n,i,j; 8 while(scanf("%d",&n) && n){ 9 for(i=0; i<n; i++)10 for(j=0; j<n; j++)11 scanf("%d",&am 阅读全文
posted @ 2013-08-28 17:56 贾树丙 阅读(270) 评论(0) 推荐(0) 编辑
摘要:Headmaster's Headachehe headmaster of Spring Field School is considering employing some new teachers for certain subjects. There are a number of teachers applying for the posts. Each teacher is able to teach one or more subjects. The headmaster wants to select applicants so that each subject is 阅读全文
posted @ 2013-08-28 03:58 贾树丙 阅读(634) 评论(1) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3006题目大意:给定n个集合,每个集合都是由大于等于1小于等于m的数字组成,m最大为14。由给出的集合可以组成多少个不同的集合。输入描述:第一行为n,m,接下来n行,每行包含k+1个数字,第一个为k,表示该集合的元素个数,接下来k行表示集合元素。Sample Input4 41 11 21 31 42 43 1 2 34 1 2 3 4Sample Output152分析:以为m的规模很小,可以用二进制表示集合。借助位运算的或( | )来达到集合合并的目的。 比如一个集合中有两个元素 1 3 那就. 阅读全文
posted @ 2013-08-26 19:11 贾树丙 阅读(312) 评论(0) 推荐(0) 编辑
摘要:1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围。故想到用int s[num]。至于开多大的数组,可以自己用DFS搜索试试看;也可以遍历0~2^m-1,对每个数值的二进制表示进行检查;也可以用数学方法(?)2. 如何构造状态: 当然,在此之前首先要想到用DP(?)。之后,才考虑去构造状态函数f(...)。 这里有一个链式的限制:某行上的某个棋子的攻击范围是2。即,第r行的状态s[i],决定第r-1行只能取部分状态s[p];同时,第r行的状态s[i],第r-1行状态s[p],共同决定第r-2行只能取更少的状态s[q]。当然,最 阅读全文
posted @ 2013-08-24 03:55 贾树丙 阅读(271) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一天则扣掉一单位学分, 要你求出完成所有作业而被扣最小的学分, 并将完成作业的顺序输出.Sample Input23Computer 3 3English 20 1Math 3 23Computer 3 3English 6 3Math 6 3Sample Output2ComputerMathEnglish3ComputerEnglishMath分析:(转)刚开始以为是背包, 但背包难以记录输出顺序 阅读全文
posted @ 2013-08-24 03:47 贾树丙 阅读(288) 评论(0) 推荐(0) 编辑
摘要:炮兵阵地Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。现在,将军们规划如何部署炮兵部队,在防止误 阅读全文
posted @ 2013-08-23 19:27 贾树丙 阅读(418) 评论(0) 推荐(0) 编辑
摘要:Hackers’ CrackdownMiracle Corporations has a number of system services running in a distributed computer system which is a prime target for hackers. The system is basically a set ofNcomputer nodes with each of them running a set ofNservices. Note that, the set of services running on every node is sa 阅读全文
posted @ 2013-08-21 16:11 贾树丙 阅读(968) 评论(2) 推荐(0) 编辑
摘要:胜利大逃亡(续)Problem DescriptionIgnatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)……这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。Ignatius每分钟只能从一个坐标走到相邻四个坐标中的其中一个。魔王每t分钟回地牢视察一次,若发现Ignatius不在原位置便把他拎回去。经过若干次的尝试,Ignatius已画出整个地牢的地图。现在请你帮他计算能否再次成功逃亡。只要在魔王下次视察之前走到出口就算离 阅读全文
posted @ 2013-08-20 06:11 贾树丙 阅读(355) 评论(0) 推荐(0) 编辑
摘要:Pieces题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除所需要的最少步数。比如:axbyczbea 可以一次删除掉abcba 得到xyzeSample Input2aaabbSample Output12分析:这道题目刚出来时居然有超过一半的人AC,是我太弱了吗? 到底不会,先贴出标程,再慢慢消化好了 集合上的动态规划。。。和点集配对很像,这里我先求出所有的回文串,然后dp。 设d[S]表示将集合S中的字母删除需要多少步,结果就是d[(1 2 #... 阅读全文
posted @ 2013-08-02 09:21 贾树丙 阅读(286) 评论(0) 推荐(0) 编辑