交了十几遍,该用的优化都用了
然后摆烂,决定用随机排序让sort更快一点
然后就A了。。。。。
#include<bits/stdc++.h>
#define sort random_shuffle
using namespace std;
int n;
int f[70];
int sum;
int tt = 1;
bool used[70];
int cnt;
void sch(register int tgt,register int p,register int len,register int t){
if(p == cnt){
printf("%d",tgt);
exit(0);
}
if(len > tgt) return;
if(len == tgt){
sch(tgt,p + 1,0,1);
}
if(tgt - len < f[n]) return;
register int tag = 0;
for(register int i = t;i <= n;i++){
if(used[i] == 0 && len + f[i] <= tgt && f[i] != tag){
used[i] = 1;
sch(tgt,p,len + f[i],i + 1);
tag = f[i];
used[i] = 0;
if(len == 0 || len + f[i] == tgt) return;
}
}
}
int main(){
scanf("%d",&n);
// n = read();
for(register int i = 1;i <= n;i++){
scanf("%d",&f[i]);
// f[i]= read();
sum += f[i];
}
sort(f + 1,f + n + 1);
stable_sort(f + 1,f + n + 1,greater<int>());
for(register int i = f[1];i <= sum / 2;i++){
if(sum % i == 0){
cnt = sum / i;
memset(used,0,sizeof(used));
sch(i,0,0,1);
}
}
sch(sum,0,0,1);
}