这类题有什么好办法卡掉全随机乱搞吗
查看原帖
这类题有什么好办法卡掉全随机乱搞吗
988025
xxsevenWishBloom楼主2024/8/29 18:14

rt,看到这道题突然想试试能不能乱搞,于是写了个每次shuffle然后做必须连续取的 O(n)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;
}

2024/8/29 18:14
加载中...