Vijos 1409-纪念品分组【贪心】

不念不忘少年蓝@ 2022-07-27 11:56 253阅读 0赞

P1409纪念品分组

Accepted

标签: NOIP普及组2007 [显示标签]

描述

元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。

你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

【限制】

50%的数据满足: 1 <=n <= 15

100%的数据满足: 1 <= n <= 30000, 80 <= W <= 200

格式

输入格式

第1行包括一个整数w,为每组纪念品价格之和的上限= 第2行为一个整数n,表示购来的纪念品的总件数G

第3-n+2行每行包含一个正整数Pi (5 <= Pi <= w3)w表示所对应纪念品的价格。

输出格式

仅1行,包含一个整数, ep最少的分组数目合

样例1

样例输入1[复制]

  1. 100
  2. 9
  3. 90
  4. 20
  5. 20
  6. 30
  7. 50
  8. 60
  9. 70
  10. 80
  11. 90

样例输出1[复制]

  1. 6

限制

各个测试点1s

来源

Noip2007普及组第2题

  1. #include<stdio.h>
  2. #define INF 0x3f3f3f3f
  3. #include<string.h>
  4. #include<algorithm>
  5. using namespace std;
  6. int num[100000];
  7. int main()
  8. {
  9. int w;
  10. scanf("%d",&w);
  11. int t;
  12. scanf("%d",&t);
  13. int i,j;
  14. int ans=0;
  15. for(i=1;i<=t;i++)
  16. {
  17. scanf("%d",&num[i]);
  18. }
  19. int wc=t;
  20. sort(num+1,num+t+1);
  21. for(i=1;i<=t;i++)
  22. {
  23. if(i>wc)
  24. break;
  25. if(i==wc)
  26. {
  27. ans++;
  28. break;
  29. }
  30. for(j=wc;j>=1;j--)
  31. {
  32. if(num[i]+num[j]<=w)
  33. {
  34. num[j]=INF;
  35. ans++;
  36. wc--;
  37. break;
  38. }
  39. else
  40. {
  41. ans++;
  42. wc--;
  43. }
  44. }
  45. }
  46. printf("%d\n",ans);
  47. return 0;
  48. }

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 洛谷P1094 纪念品分组

    题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括

    相关 NOIP 2007 纪念品分组(贪心)

    题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件

    相关 贪心算法4:纪念品分组

    > 几个贪心的例子: 1. 最优装载问题: 给n个物体,第i个物体重量为wi,选择尽量多的物体,使得总重量不超过C。 贪心策略:将物体的重量从小到大排序,每次选择最轻的物