1 条题解

  • 0
    @ 2026-7-31 10:49:09
    #include <bits/stdc++.h>
    const int N=5e3+10,M=310;
    using namespace std;
    int n,m,ans;
    int a[N],b[M];
    int check(int mid){
    	int c[N],d[M];
    	memcpy(c,a,sizeof(c));
    	memcpy(d,b,sizeof(d));
    	for(int i=mid;i>=1;i--){
    		int mn=INT_MAX,id=0;
    		for(int j=m;j;j--)
    			if(d[j]>=c[i]&&d[j]<mn)
    				mn=d[j],id=j;
    		if(!id)
    			return 0;
    		d[id]-=c[i];
    	}
    	return 1;
    }
    int main(){
    //	freopen("data.in","r",stdin);
    //	freopen("my.out","w",stdout);
    	scanf("%d",&m);
    	for(int i=1;i<=m;i++)
    		scanf("%d",&b[i]);
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    	sort(a+1,a+n+1);
    	sort(b+1,b+m+1);
    	int l=0,r=n;
    	while(l<=r){
    		int mid=(l+r)>>1;
    		if(check(mid)){
    			ans=mid;
    			l=mid+1;
    		}else
    			r=mid-1;
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    2899
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    42
    已通过
    2
    上传者