uva-321-暴力枚举-隐式图搜索】的更多相关文章

题意: 给你三个杯子,a,b,c,没有刻度,刚开始c杯是满的,倒水的要求,要么倒出水的杯子倒空,要么倒入杯子倒满. 结果: 要求某个杯子内有d水量,并且倒出的水量最少,如果倒不出d水量,那么倒出d1(d1<d)水量,并且倒出的水量最少 解题思路: 总的水量为c,只要知道前俩个杯子的水量,那么第三个杯子的水量就确定了,所以,状态数最大只有a * b种,所以一个二维数组标记状态就够. 要求倒出的水量最少,那么使用优先队列,按照倒出的水量最少开始搜索. 初始化结点为(0,0,c),由这个结点开始往外扩…
题意:给你n个房间,有许多灯的控制开关,i房间灯的开关在j房间,未开灯的房间不能进,i房间和j房间之间如果没有门,也不能从i进入到j,开始房间是1,并且灯是开着的,问你是否能够走到最后一个房间n,并且此时其他房间的灯都是关着的.如果存在多个解,输出操作步数最小的操作序列. 范围:n<=10, 解题思路:设状态为,当前的房间编号+当前其他房间灯的状态.所以总的状态为N*2^N,最大值10*1024,裸枚举. 注意,这道题目每次枚举都必须从房间编码1-N,要不然会wa,而且,PE也wa.使用了位标志…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=599 题意: 补丁在修正bug时,有时也会引入新的bug.假定有n(n≤20)个潜在bug和m(m≤100)个补丁,每个补丁用两个长度为n的字符串表示,其中字符串的每个位置表示一个bug.第一个串表示打补丁之前的状态(“-”表示该bug必须不存在,“+”表示必须存在,0表示无所谓),…
题意:有N个潜在的bug和m个补丁,每个补丁用长为N的字符串表示.首先输入bug数目以及补丁数目.然后就是对M个补丁的描述,共有M行.每行首先是一个整数,表明打该补丁所需要的时间.然后是两个字符串,第一个字符串是对软件的描述,只有软件处于该状态下才能打该补丁该字符串的每一个位置代表bug状态("-"代表该位置没bug,"+"代表该位置有bug,"0"表示该位置无论有没有bug都可打补丁).然后第二个字符串是对打上补丁后软件状态的描述"-…
Fans and Gems Input: Standard Input Output: Standard Output Tomy's fond of a game called 'Fans and Gems' (also known as Gravnic). In the game, he can use fans to collect gems, but he's satisfied with his play only if all the gems are collected with m…
这道题用到了很多知识点, 是一道好题目.      第一用了状态压缩, 因为这里最多只有20位, 所以可以用二进制来储存状态 (要对数据范围敏感), 然后 涉及到了一些位运算.     第二这里是隐式图搜索, 和之前有一道bfs倒水的有点像, 就是题目和图论没有半毛钱关系, 但是却可以自己建 图来做, 把状态看作点, 把状态转移看作边.    第三因为求最短时间, 所以用了堆优化dijsktra. #include<cstdio> #include<queue> #define R…
[HNOI2006]最短母串问题 题目描述: 给定n个字符串(S1,S2.....,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,......,Sn)都是T的子串. 输入格式: 第一行是一个正整数n(n<=12),表示给定的字符串的个数. 以下的n行,每行有一个全由大写字母组成的字符串.每个字符串的长度不超过50.   输出格式: 只有一行,为找到的最短的字符串T.在保证最短的前提下, 如果有多个字符串都满足要求,那么必须输出按字典序排列的第一个.     考虑T匹配了所有的…
题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管:如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管:如果是0,无论这灯是否开,都不管. 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉. 输入格式: 前两行两个数,n m 接下来m行,每行n个数,a[i][j]表示第i个开关对第j…
不可多得的好题目啊,我看了别人题解才做出来的,这种题目一看就会做的实在是大神啊,而且我看别人博客都看了好久才明白...还是对状态压缩不是很熟练,理解几个位运算用了好久时间.有些题目自己看着别人的题解做出来完全不是一个味,毕竟别人给你提供了思路,比如这道题,刚看题目,怎么就能转移到是用最短路搜索呢..其次,好多注意事项这些自己想出来才真正是锻炼思维.否则总是踩着别人的脚印在行走 还有就是不得不说一说UVA上的题目,又长又难懂...实在是弄得我好烦. 说说这个题目,能够发现是个隐式图是第一个难点,然…
https://vjudge.net/problem/UVA-11088 对于每一种子集的情况暴力枚举最后一个三人小组取最大的一种情况即可,我提前把三个人的子集情况给筛出来了. 即 f[S]=MAX{ f[S^X]+ok(X) |  X€三个人的子集 } ok(X)判断X所有的和是否>=20; #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #inclu…