纪念品分组--双指针&贪心

tech2022-07-11  159

今天做题感觉好啊,第一题就秒杀,哈哈哈 题解: 首先将纪念品按价格从小到大排序,然后用2个指针i,j分别指向头和尾,直到i>j时才退出。因为题目说了每组最多只能有2个纪念品,且纪念品价格之和不能超过w,那么如果当前状态下的a[i] + a[j] > w,那么a[j]只能独自成为一组了,因为此时的i只要向后移动,就一定是非递减的。

using namespace std; #include<bits/stdc++.h> int main(){ int w,n; int a[30005]; cin>>w; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int sum=0; int i=0,j=n-1; while(i <= j) { if(a[i]+a[j] <=w ) { sum++; i++; j--; } else { sum++; j--; } } cout<<sum; return 0; }
最新回复(0)