《教你玄学暴增42分》
查看原帖
《教你玄学暴增42分》
181037
ysmlwudia楼主2020/10/18 15:48
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
using namespace std;
int n,W,w[20],mark[20],ans=50,ssm=0;
void dfs(int x,int sum,int cnt,int a){
	if(a>=ssm){
		ans=min(ans,cnt);
		return;
	}
	if(cnt+((ssm-a)/W+rand()%10)>ans)return;
	
	for(int i=1;i<=n;i++){
		if(!mark[i]){
			mark[i]=1;
			if(sum+w[i]<=W) dfs(i,sum+w[i],cnt,a+w[i]);
			else dfs(i,w[i],cnt+1,a+w[i]);
			mark[i]=0;
		}
	}
}
int main(){
	cin>>n>>W;
	for(int i=1;i<=n;i++){
		cin>>w[i];
		ssm+=w[i];
	}
	mark[1]=1;
	dfs(n,w[1],1,w[1]);
	cout<<ans;
	return 0;
}

本来这种搜法优化开满只有42分,但是加了个随机数qwq

if(cnt+((ssm-a)/W+rand()%10)>ans)return;

从42暴增到84,且多次尝试均为84分,舒服啊!

2020/10/18 15:48
加载中...