307 - Sticks

来源:互联网 发布:雅士尼处理器软件 编辑:程序博客网 时间:2024/05/03 15:41
# include<stdio.h># include<string.h># include<algorithm>using namespace std;int n,stick[70],vis[70];int dfs(int cur,int remain,int orgin,int len);bool cmp(int a,int b){return a>b;}int main(){    while(scanf("%d",&n)!=EOF)    {          if(!n)    break;          int sum=0;          for(int i=0;i<n;i++)          {              scanf("%d",&stick[i]);              sum+=stick[i];          }          sort(stick,stick+n,cmp);          for(int i=stick[n-1];i<=sum;i++)          {              if(sum%i)     continue;              memset(vis,0,sizeof(vis));              vis[0]=1;              if(dfs(0,i-stick[0],0,i))              {                  printf("%d\n",i);                  break;              }          }    }    return 0;}int dfs(int cur,int remain,int orgin,int len){    if(remain==0)    {        int i;        for(i=orgin+1;i<n;i++)        {            if(vis[i])  continue;            vis[i]=1;            if(dfs(i,len-stick[i],i,len))   return 1;            vis[i]=0;            return 0;        }        if(i==n)    return 1;    }    int save=-1;    for(int i=cur+1;i<n;i++)    {        if(stick[i]==save||vis[i])   continue;        vis[i]=1;        if(remain-stick[i]>=0&&dfs(i,remain-stick[i],orgin,len))     return 1;        vis[i]=0;        save=stick[i];    }    return 0;}

0 0
原创粉丝点击