poj 2363 poj 1011 dfs + 剪枝

#include 
#include 
#include 
int sticks[20];
bool visit[20];
int cmp(const void * a,const void *b)
{
	return *(int *)b - *(int *)a;
}
bool dfs(int s,int N,int cur,int left,int num,int lengthside) // num 是已经拼好的 长度
{ //s 是搜索木棍的起始位置 N 是木棍的总数 left是要拼凑的长度 cur是当前的长度
	if (num==3) //找到三根 其他的就不用找了
		return true;
	int i;
	for (i=s;i

两题基本一样

先对木棍排序 ,然后按照质指定的长度在数组里搜索。

刚开始,这两题都是按照子集和的方法做的,一直TLE,无论怎么剪枝都不行,后来一想,还是按照指定长度搜索正解效率更高。



你可能感兴趣的:(算法,POJ,搜索)