3 条题解

  • 1

    神似 P1094 [NOIP 2007 普及组] 纪念品分组 - 洛谷

    很经典的贪心,我们在读入物品的价格之后,对物品的价格进行排序。

    然后从价格最小的物品开始枚举,从价值最大的物品反向查看能否与这个物品分为一组。

    #include<bits/stdc++.h>
    using namespace std;
    int a[30010];
    int ans;
    int main(){
        int w,n;
        cin>>n>>w;
        for(int i=0;i<n;i++){
        	cin>>a[i];
        }
        sort(a,a+n);
    	int l=0,r=n-1;
    	while(l<=r){
    		if(a[l]+a[r]<=w){
    //如果最大的和最小的可以放成一堆
    			ans++;
    			l++;
    			r--;
    		}else if(a[r]<=w){
    			ans++;
    			r--;
    		}else{
    			if(a[r]>w)	r--;
    			if(a[l]>w)	l++;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    800
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    86
    已通过
    4
    上传者