P1120 下面的代码大红大紫的,只拿了 24 分,查了半天死活查不出错误,求各位万能的谷民帮帮这个啥也不会的蒟蒻吧 qaq
#include<bits/stdc++.h>
using namespace std;
int n,tot,cnt,l,len[75],arr[75],pr[75];
void dfs(int u,int k,int p){
if(u==0){dfs(l,k-1,arr[cnt]);return;}
if(k==0){cout<<l;exit(0);}
p=p<u?p:u;
while(p&&len[p]==0)p--;
while(p){
if(len[p]){
len[p]--;
dfs(u-p,k,p);
len[p]++;
if((u==p)||(u==l))return;
p=pr[p];
}else p=pr[p];
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int tmp;
cin>>tmp;
if(tmp>50)continue;
arr[++cnt]=tmp,len[tmp]++,tot+=tmp;
}
sort(arr+1,arr+1+cnt);
for(int i=1;i<=cnt;i++)
if(arr[i]!=arr[i-1])pr[arr[i]]=arr[i-1];
for(l=arr[cnt];l<=(tot>>1);l++)
if(tot%l==0)dfs(l,tot/l,arr[l]);
cout<<tot;
return 0;
}