题意:
给你最多500个数 ,让你你设置最多两个数 形式为 (1,2) 或(3,4)相邻的两个数
使得这500个数都可以由这两个数分解 就比如 5=2+3 7=2+2+3
问你最小的分割数
ok函数里 if(b+k>=x-1 )的意思是 从前面 凑整的小球里面取出来 1个给后面没有整的小球如果这样都可以大于等于x-1那么一定可以凑出来
#include<bits/stdc++.h>
#define en '\n'
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
const int maxn =3333;
int read(){
int tem;scanf("%d",&tem);return tem;
}
int a[maxn],n;
ll ans;
bool ok(int x){ans=0;
for(int i=1;i<=n;i++){
if(a[i]%x==0){
ans+=a[i]/x;continue;
}
int k=a[i]/x;int b=a[i]%x;
if(b+k>=x-1){
ans+=(k+1);continue;
}
else return 0;
}
return 1;
}
signed main()
{
#ifdef local
freopen("input2.txt","r",stdin);
#endif
cin>>n;
int mi=inf;
for(int i=1;i<=n;i++)a[i]=read(),mi=min(mi,a[i]);
for(int i=1;i<=mi;i++){
if(ok(mi/i+1) or ok(mi/i)){
cout<<ans<<en;
return 0;
}
}
return 0;
}