classSolution{
public:int batchSize;int n;int ans =0;
vector<int> groups;intenergy(){
int res =1;for(int i =0, s =0; i < n; i ++){
//计算是否有剩余
s =(s + groups[i])% batchSize;if(!s && i < n -1) res ++;}
ans =max(ans, res);return-res;}voidth(){
srand(time(NULL));//很重要random_shuffle(groups.begin(), groups.end());for(double t =1e6; t >1e-6; t *=0.96){
int a =rand()% n, b =rand()% n;int ea =energy();swap(groups[a], groups[b]);int eb =energy();int dt = eb - ea;if(exp(-dt / t)>(double)rand()/ RAND_MAX)continue;swap(groups[a], groups[b]);}}intmaxHappyGroups(int _batchSize, vector<int>& _groups){
//调整groups的顺序,使最多人开心
batchSize = _batchSize;
groups = _groups;
n = groups.size();for(int i =0; i <40; i ++)th();return ans;}};
classSolution{
public:int ans = INT_MAX;
vector<int> jobs;intenergy(int k){
int n = jobs.size();
vector<int>s(k);for(int i =0; i < n; i ++)//对于每项工作,找到一个最闲的工人分配{
int kk =0;for(int j =1; j < k; j ++)if(s[j]< s[kk]) kk = j;
s[kk]+= jobs[i];}int res =0;for(auto&x : s)
res =max(x, res);//找到最大工作时间
ans =min(ans, res);return res;//能量越小越好 }voidth(int k){
int n = jobs.size();double T =10000;//一个很高的温度random_shuffle(jobs.begin(), jobs.end(