rt,看到这道题突然想试试能不能乱搞,于是写了个每次shuffle然后做必须连续取的 O(n) 贪心,把限制区间稍微放大一点就水过了。
如果我是出题人,出了一道类似这种的题,有没有什么好办法卡掉这种完全shuffle乱搞的做法。 放一下代码。
#include<bits/stdc++.h>
using namespace std;
int n,w,a[20],ans=1e9,now,tot;
int main(){
srand(time(0));
cin>>n>>w; w*=1.05;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=2000000;++i){
random_shuffle(a+1,a+n+1);
tot=1; now=0;
for(int j=1;j<=n;++j) {
if(now+a[j]>w) now=a[j],tot++;
else now+=a[j];
}
ans=min(ans,tot);
}
cout<<ans;
return 0;
}