74分求条
查看原帖
74分求条
1389641
_Kenba_楼主2024/12/14 21:29
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,w;
int h[20];
int mn,sum;
int res;
int v[20];
int flag=0;
bool cmp(int x,int y){
	return  x>y;
}
void dfs(int rest,int cnt,int sum,int las){
	if(flag!=0){
		return;
	}
	if(rest==0){
		if(cnt<n){
			flag=2;
			return;
		}
		else {
			flag=1;
			return;
		}
	}
	if(cnt==n){
		flag=1;
		return;
	}
	for(int i=n;i>=1;i--){
		if(w-sum>=h[i]&&v[i]==0){
			break;
		}
		if(w-sum<h[i]&&v[i]==0){
			dfs(rest-1,cnt,0,1);
		}
		
	}
	for(int i=las;i<=n;i++){
		if(sum+h[i]<=w&&v[i]==0){
			v[i]=1;
			//cout<<rest<<" "<<cnt<<" "<<h[i]<<endl;
			dfs(rest,cnt+1,sum+h[i],i+1);
			v[i]=0;
		}
	}
}
signed main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++){
		cin>>h[i];
		sum+=h[i];
	}
	res=sum/w;
	sort(h+1,h+n+1,cmp);
	for(int i=1;i<=n;i++){
		cout<<h[i]<<" ";
	}
	for(int i=res;i<=n;i++){
		memset(v,0,sizeof(v));
		flag=0;
		dfs(i,0,0,1);
		if(flag==1){
			cout<<i;
			return 0;
		}
	}
}
2024/12/14 21:29
加载中...