P1094 [NOIP2007 普及组] 纪念品分组

题目链接 https://www.luogu.com.cn/problem/P1094

发现贪心总是和排序分不开欸(?)


 

先排序,用双指针分别从前后向中间走。

假如第一次a[l]+a[r]<=w,那么双指针都移动,否则r--。(很好想吧不解释了)


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int w,n,ans=0;
 6     cin>>w>>n;
 7     int a[n+5];
 8     for(int i=1;i<=n;i++)
 9         cin>>a[i];
10     sort(a+1,a+n+1);
11     int l=1,r=n;
12     while(l<=r)
13     {
14         if(a[l]+a[r]<=w)
15         {
16             l++; r--; ans++;
17         }
18         else
19         {
20             r--; ans++;
21         }
22     }
23     cout<<ans;
24     return 0;
25 }

 

posted @ 2022-04-07 21:27  爱吃虾滑  阅读(69)  评论(0编辑  收藏  举报