poj 1011 sticks Memory:44K Time:93MS

来源:互联网 发布:js数组删除某个元素 编辑:程序博客网 时间:2024/06/10 09:05
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,s[65],f[65],len,sum;    //判断当前这根木棍是否使用过、、int dfs(int cur,int num,int pos)    //num表示组成的木棍数量、、{    if(cur==0)    {        if(num==1||dfs(len,num-1,n-1))            return 1;        return 0;    }    for(int i=pos;i>=0;i--)        if(!f[i]&&s[i]<=cur)        {if(i!=pos&&s[i]==s[i+1]&&!f[i+1])continue;            f[i]=1;            if(dfs(cur-s[i],num,i-1))                return 1;            f[i]=0;    //回溯if(cur==s[i]||cur==len)break;        }    return 0;}int main(){int i;while(scanf("%d",&n),n){memset(f,0,sizeof(f));for(sum=i=0;i<n;i++){scanf("%d",s+i);sum+=s[i];}sort(s,s+n);for(i=s[n-1];i<sum;i++)if(sum%i==0&&dfs(len=i,sum/i-1,n-1))break;printf("%d\n",i);}}
原创粉丝点击