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

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

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

输入格式

共 n+2n+2 行:

第一行包括一个整数 ww,为每组纪念品价格之和的上限。

第二行为一个整数 nn,表示购来的纪念品的总件数 GG。

第 3\sim n+23∼n+2 行每行包含一个正整数 P_iP

i

  表示所对应纪念品的价格。

import java.util.Arrays;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int w = scanner.nextInt();

        int n = scanner.nextInt();

        int[] values = new int[n];

        int count = 0;

        int start= n-1;

        for(int i = 0; i<n; i++) {

            values[i] = scanner.nextInt();

        }

Arrays.sort(values);

        for (int i = 0; i < n; i++) {

            for (int j = start; j >= i; j--) {

                if (values[j]  + values[i] <= w || i == j ){

                    count++;

                    start= j-1;

                    break;

                }

                    count++;

            }

        }

        System.out.println(count);

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容