洛谷P1094 纪念品分组 贪心
比较简单,用了sort,选一大一小
题目链接如下
洛谷P1094 纪念品分组
代码如下
//用sort排序,一大一小加起来组就会最少
#include<cstdio>
#include<algorithm>
using namespace std;
bool com(int a,int b)
{
return a<b;
}
int main()
{
int w,ans=0,l=0,r;//w代表价格和的上限ans记录次数 l和r相当于两个指针
int n,pri[30003];//n代表纪念品总件数,pri代表每一件样品的价格
scanf("%d%d",&w,&n);
for(int i=0;i<n;i++)
{
scanf("%d",&pri[i]);
}
sort(pri,pri+n,com);
r=n-1;
while(l<=r)
{
if(pri[l]+pri[r]<=w)
{
ans++;
l++;
r--;
}
//贪心过程开始
else
{
r--;//这里一定是r--,因为如果是l++越加越大一定是不对的
ans++;
}
}
printf("%d",ans);
return 0;
}