不知道为什么,T了三个点,下载数据后发现num的大小突然飙到12亿,虽然后来选择在每次循环中重新定义一遍优先队列过了,但还是想知道原因
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int n,b[1005],k,ans,mx,tot,tmp;
priority_queue<int>num;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",b+i);
for(int i=1;i<=n;i++)mx=max(mx,b[i]);
for(int i=1;i<=mx;i++){
while(!num.empty())num.pop();
tot=0;
for(int j=1;j<=n;j++){
tot+=b[j]/i;
num.push(b[j]%i);
}
if(tot>k)continue;
else if(tot<k/2)break;
else{
int sum=(tot-k/2)*i;
for(int j=tot-k/2+1;j<=k/2;j++){
sum+=num.top();
num.pop();
}
ans=max(ans,sum);
}
}
printf("%d",ans);
}