CE求助
查看原帖
CE求助
935574
dulinfan2023楼主2023/12/3 11:13
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
#define debug() cout<<"come on"<<'\n'
int a[N],n,v,c,ans;
bool vis[N];
void find(int k,int x){
	x=v-x;
	for(int i=k;i<=n;i++){
		if(a[i]<=x&&!vis[i]){
			c+=a[i];
			find(i+1,v-x+a[i]);
		}
	}
	ans++;
}
int ch(){
	for(int i=n;i>=1;i--){
		if(!vis[i])return i;
	}
	return 0;
}
signed main(){
	cin>>v;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+1+n,greater<int>);
	for(int i=1;i<=n;i++){
		if(vis[i])continue;
		if(a[i]+c<=v){
			c+=a[i];
			vis[i]=true;
			int x=ch();
			if(x==0){
				ans++,c=0;
				break;
			}
			else{
				if(c+a[x]>v){
					ans++,c=0;
				}
				else{
					find(i+1,c);
				}
			}
		}
	}
	cout<<ans; 
	return 0;
}

2023/12/3 11:13
加载中...