Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

是不是深度优先搜索?

Posted by 139074241 at 2015-02-04 14:02:38 on Problem 1011
#include<iostream>
#include<algorithm>
#include<cstring>
#include<functional>                           //greater<int> 所用。 
using namespace std;
int l[68],n,num,aim;
bool t[68];                                    //标记对应木棍是否已经使用。 
bool dfs(int stick,int len,int pos)
{
	/*stick表示当前已组合好的棍子数,len表示已有的长度,pos表示搜索到第几根。*/ 
	bool sign=(len==0?true:false);
	if(stick==num)                             //stick==num表示搜索成功。 
		return true;
	for(int i=pos+1;i<n;++i)
	{
		if(t[i])                               //该木棍已被用过,跳过。 
			continue;
		if(len+l[i]==aim)                      //len加上这个木棍刚好组成目标长度. 
		{
			t[i]=true;                         //先标记使用,再向下一层搜索。 
			if((dfs(stick+1,0,-1)))            //下一层搜索成功,返回成功。 
				return true;
			t[i]=false;                        //下一层搜索未成功,该木棒重新标记为未使用。 
			return false;                      //返回此层搜索失败。 
		}
		else if(len+l[i]<aim)                  //len加上此木棍组成小于目标长度的木棍。 
		{
			t[i]=true;                         //先标记使用。 
			if(dfs(stick,len+l[i],i))          //向下一层搜索,注意参数变化。 
				return true;
			t[i]=false;                        //下一层搜索失败,该木棍重现标记为未使用。 
			if(sign)
				return false;
			while(l[i]==l[i+1])                //下一根木棍和当前木棍长度相同,则不必重复检验,剪枝。 
				++i;
		}
	}
	return false;
}
int main()
{
	int i,sum;
	while(cin>>n&&n)
	{
		sum=0;
		for(i=0;i<n;++i)
		{
			cin>>l[i];
			sum+=l[i];
		}
		sort(l,l+n,greater<int>());                //将所有木棍降序排列。 
		for(aim=l[0];aim<=sum;++aim)
			if(sum%aim==0)
			{
				num=sum/aim;                     //num指拼成的木棍的个数。 
				memset(t,0,sizeof(t));
				if(dfs(1,0,-1))
				{
					cout<<aim<<endl;
					break;
				}
			}
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator