问题标题: 酷町堂:2922 期末奖励

0
0
已解决
周琪岳
周琪岳
资深光能
资深光能

2922   期末奖励

题目描述 Description

期末考试结束了,班主任决定根据大家的期末考试成绩给大家发奖品,他要把购来的奖品根据价格进行分组,但每组最多只能包括两件奖品, 并且每组奖品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有奖品,班主任希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

输入描述 Input Description

共 n+2 行:

第 1 行包括一个整数 w ,为每组奖品价格之和的上限。

第 2 行为一个整数 n ,表示购来的奖品的总件数 G 。

第 3 至 n+2 行每行包含一个正整数 P_i(5<=p<=w)表示所对应奖品的价格。

输出描述 Output Description

一个整数,即最少的分组数目。

样例输入 Sample Input

100 9 90 20 20 30 50 60 70 80 90

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

50%的数据满足: 1≤n≤15

100%的数据满足:1≤n≤30000,80≤w≤200

周琪岳在2020-09-29 19:34:51追加了内容


0
已采纳
崔竣恺
崔竣恺
中级守护
中级守护

main函数外:

首先,定义:
int c=1;
int cnt;
int w,a[30010],n;
------------------
main函数内:

其次,输入n和a数组,并将a数组从大到小排序(sort->algorithm+cmp)
然后,while判断c<=e
if(a[c]+a[e]<=w) 更新变量:c++; e--; cnt++;
else 更新变量:c++; cnt++;
输出cnt

0
0
我要回答