39分,不知道哪里可以剪枝了
  • 板块P1120 小木棍
  • 楼主曹宇凡
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/20 15:24
  • 上次更新2023/10/27 14:27:15
查看原帖
39分,不知道哪里可以剪枝了
143511
曹宇凡楼主2022/8/20 15:24
#include<bits/stdc++.h>
using namespace std;
int a[70], summ;
int n, sum=0, maxn=0, minn=60;
vector<int>v;
int dfs(int x, int l, int p)
{
    if(summ==0&&p==0)return 1;
    for(int i=min(l-p, maxn);i>=minn;i--){
        if(a[i]>0){
            if(p+i<l){
                a[i]--;
                summ--;
                if(dfs(x+1, l, p+i))return 1;
                summ++;
                a[i]++;
            }
            else if(p+i==l||p==0){
                a[i]--;
                summ--;
                if(dfs(x+1, l, 0))return 1;
                a[i]++;
                summ++;
                break;
            }
        }
    }
    return 0;
}
int main()
{
    while(cin>>n){
    if(n==0)break;
    for(int i=1;i<=n;i++){
        int t;
        cin>>t;
        if(t>50)continue;
        a[t]++;
        maxn=max(maxn, t);
        minn=min(minn, t);
        sum+=t;
    }
    for(int i=maxn;i<=sum;i++)
        if(sum%i==0)v.push_back(i);
    for(int i=0;i<v.size();i++){
        summ=n;
       if(dfs(0, v[i], 0)){cout<<v[i]<<endl;break;}
    }
    }
}
~~~~~~~~
2022/8/20 15:24
加载中...