1011 Sticks

来源:互联网 发布:js 文件下载 编辑:程序博客网 时间:2024/06/09 15:46

经典搜索

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define N 100int used[N],len[N],sum,n,Min;bool find(int p, int rest, int trest){    if (trest==Min) return true;    for (int i=p; i!=n; i++)       if (!used[i] && len[i]<=rest)       {           used[i]=1;           if (len[i]==rest)           {               if (find(0,Min,trest-len[i])) return true;           }           else           {               if (find(i,rest-len[i],trest-len[i])) return true;           }           used[i]=0;           if (len[i]==rest) return false;           if (trest==sum) return false;           if (rest==Min) return false;           while (len[i+1]==len[i]) i++;       }    return false;}bool cmp(int x,int y) { return x>y; }int main(){    while (scanf("%d",&n) && n)    {        for (int i=0; i!=n; i++)           scanf("%d",&len[i]);        memset(used,0,sizeof(used));        sort(len,len+n,cmp);        sum=0;        for (int i=0; i!=n; i++)           sum+=len[i];        Min=len[0];        while (sum%Min!=0) Min++;        while (!find(0,Min,sum))        {            Min++;            while (sum%Min!=0) Min++;        }        printf("%d\n",Min);    }    return 0;}


原创粉丝点击