摘要:
题目大意:这题跟HDOJ"非常可乐"那题很像,用状态空间搜索即可。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #define N 101 5 #define MIN(a,b) ((a)<(b)?(a):(b)) 6 using namespace std; 7 typedef struct node 8 { 9 int v[2],t;10 }node;11 node cur,next;12 queue<node> Q; 阅读全文
摘要:
题目模型:给定3个无刻度容器,容器的容积均为正整数,初始状态为第一个容器装满水,其它2个空着,问是否能将第一个容器中的水平分,若能输出最少操作步数,否则输出"NO".分析:典型的状态空间搜索题,要求最少步数,可以用BFS,将3个容器中中的水量组合定义为状态,倒水操作会造成状态转移。目标状态为某两个容器中水量相等且总和为总水量。一个小的优化是当总水量为奇数时,直接输出"NO".View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 阅读全文
摘要:
题目的模型:在一个图中,给定一系列目标结点,求从起点出发经过所有目标结点的最短距离。分析:由于目标结点数目最大为7,所以可以暴力搜索过,枚举经过目标结点的排列,然后计算选择最优的。计算距离时需要用floyd预处理任意2结点之间的最短距离。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define N 31 4 #define MIN(a,b) ((a)<(b)?(a):(b)) 5 #define INF 0x7fffffff 6 int d[N][N],t[N],a[N],n,m,cnt,ans; 阅读全文