上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 34 下一页
摘要: 题意:给你一个包含'H' 'T'的串,问最少要切几刀才能使得切下来的块分别分给2个人去使得2个人得到的H数目相等且T的数目相等。分析:明确了一点之后,这题目就很好做了。就是,至多切俩刀。具体的证明看这里吧http://hi.baidu.com/superlong/blog/item/c7e86b067ca0337703088146.htmlhdu3363#include<iostream>#include<algorithm>#include<string>using namespace std;char str[100005 阅读全文
posted @ 2012-02-10 00:29 枕边梦 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 题意:对当前的一个图,求一个最大的伪森林,即边权值最大,每一个连通分量至多含有一个圈的森林。分析:类似于求一个最大生成树,先将边权值排序,之后就是一个加边合并的过程,俩点所在边可以加入到当前集合有俩个条件:1.两点在两个集合,且有至少一个集合没有环2.两点在一个集合,且这个集合没有环hdu3367#include<iostream>#include<algorithm>using namespace std;struct edge{ int u,v,c;}e[100005];int f[10005],n,m;bool ee[100005],ff[10005];__int 阅读全文
posted @ 2012-02-09 22:19 枕边梦 阅读(385) 评论(0) 推荐(1) 编辑
摘要: 蛮好的题目,练STL,双重Map#include<iostream>#include<map>#include<string>using namespace std;int main(){ int a; cin>>a; while(a--) { map<string,map<string,int> >m; int b,count; cin>>b; string x,y; while(b--) { cin>>x>>y>>count; ... 阅读全文
posted @ 2011-12-19 21:37 枕边梦 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 题意:三维的空间,给定起点和终点,要求最少的步数。分析:一般的 广搜,就是读入这个图有点麻烦,弄晕了#include<iostream>#include<algorithm>#include<queue>using namespace std;char map[11][11][11];bool vis[11][11][11];int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};int n,ans;int ei,ej,ez;struct node{ int x,y,z,cnt; 阅读全文
posted @ 2011-12-10 15:20 枕边梦 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个4X6的矩形,有white ,blank , grey 三种颜色各有8个格子 ,给定一个初始状态,求用最少的操作次数将图形变化为中间的8个格子颜色相同。分析:话说,因为做过了hdu1667,一开始真的以为IDA*稳过的,敲完之后,直接TLE了,实在不解啊,原来是有测试数据的量太大了。按照大牛的思路是这样的:当我们确定了要将中间转成什么颜色之后,转的时候发现,另外俩种颜色也就没必要区分了,所以也就可以看成是只有俩种颜色了,之后用24个位保存状态,用BFS预处理从最终状态到每一个状态需要的最小步数。最后再根据所给的图,判断将哪种颜色转到中间的步数最少即可。虽然知道是这样的思路之后,还是 阅读全文
posted @ 2011-12-10 14:40 枕边梦 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 题意:#字形的图形,问将中间那一块转成相同数字需要的最少步数,输出字典序最小的路径。分析:跟hdu2234的无题I比,相对简单一点。其实也只是估价函数好理解一点,其他都差不多,还是迭代深搜+A*,也就是IDA*。估价函数h()=8-max(在要求的八个位置中,1,2,3,的个数);很好理解,因为没转动一步,最多只能将一个位置改为正确的。所以当前状态下,剩余的最少步数=8-max(在要求的八个位置中,1,2,3,的个数);#include<iostream>#include<algorithm>using namespace std;int map[8][8],step; 阅读全文
posted @ 2011-12-08 20:43 枕边梦 阅读(325) 评论(0) 推荐(0) 编辑
摘要: IDA*就是基于迭代深搜上的A*算法,最主要的就是在迭代深搜的过程中加了一个估价函数,关键还是这个估价函数的构造,ORZ,少了这个估价函数,对于这题目的话,直接TLE的说。这题目的估价函数是这样的,根据目前的地图简单的判断一下至少还要转多少次吧。这个估价函数“每次移动改变四个点的位置,即h()=(最少可能的横向或纵向不在位置上的点的个数+3)/4 )”,是参照大牛的。至于这么判断的,就要结合代码好好理解了……至于迭代加深,在之前的题目已经接触过了#include<iostream>#include<algorithm>using namespace std;int ma 阅读全文
posted @ 2011-12-08 19:20 枕边梦 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 题意:吕布大战群雄,每位英雄都有自己的攻击力,防御力,还有hp(血量),吕布比较特殊,当他积累够100的经验值时他可以升级 。。升级的话加属性。这个比较公平一点,是单挑,每一位英雄轮流与吕布作战,当吕布杀死一个英雄后,可以得到一定的经验值,问吕布能不能杀死所有的英雄,如果可以的话,求出最后能剩余的最大血量。分析:这题目怎么被分到搜索专题了?哎,怎么剪枝还是超时……确实是比较裸的状态压缩DP,自底向上实现状态转移#include<iostream>#include<algorithm>using namespace std;struct hero{ int att,def 阅读全文
posted @ 2011-12-07 17:48 枕边梦 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 题意:其实就是泡泡龙的游戏,给你起始的地图,以及刚打出去的泡泡的位置,如果与刚打出的泡泡相连的泡泡数大于等于3,则相连的相同颜色的泡泡会掉下来,之后,没有与顶层泡泡直接或间接相连的泡泡也会掉下来。问掉下来的泡泡总数。分析:其实就是模拟一下就可以了。首先将与起始点直接或间接相连的相同颜色的泡泡标记一下,看总数num是否大于等于3.all表示起始时的泡泡总数之后要分俩种情况讨论了:1) num<3 。那么要将之前的标记清除,找出与顶层泡泡直接相连或间接相连的泡泡总数ans,all-ans就是答案了。这里解决了一个特殊情况,本来以为num<3的话,直接输出0就可以了,但其实很有可能,即使 阅读全文
posted @ 2011-12-07 13:57 枕边梦 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 题意:从n个串中找出一个最短的公共串(也许应该说序列吧,因为不要求连续,即只要保持相对顺序就好)。分析:一开始自以为是爆搜开了,因为已经知道了可以用迭代加深搜索。所谓迭代加深搜索,就是每次都限制了DFS的深度,若搜不到答案,则加深深度,继续搜索,这样就防止了随着深度不断加深而进行的盲目搜索,而且,对于这种求最短长度之类的题目,只要找到可行解,即是最优解了。所以就这样敲完代码了,敲完之后,悲剧TLE。少了一步十分重要的剪枝,就是每次DFS的时候,都要判断一下,当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回。#include<iostream>#include<a 阅读全文
posted @ 2011-12-06 20:15 枕边梦 阅读(963) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 34 下一页