• 【无标题】


    [NOIP2007 普及组] 纪念品分组

    题目描述

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

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

    输入格式

    n + 2 n+2 n+2 行:

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

    第二行为一个整数 n n n,表示购来的纪念品的总件数 G G G

    3 ∼ n + 2 3\sim n+2 3n+2 行每行包含一个正整数 P i P_i Pi 表示所对应纪念品的价格。

    输出格式

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

    样例 #1

    样例输入 #1

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

    样例输出 #1

    6
    
    • 1

    提示

    50 % 50\% 50% 的数据满足: 1 ≤ n ≤ 15 1\le n\le15 1n15

    100 % 100\% 100% 的数据满足: 1 ≤ n ≤ 3 × 1 0 4 1\le n\le3\times10^4 1n3×104 80 ≤ w ≤ 200 80\le w\le200 80w200 5 ≤ P i ≤ w 5 \le P_i \le w 5Piw

    思路:
    读入之后先用sort排序,然后用两个指针(l,r)一起向中间走,每次选择都尽可能的让当前状态下最大的和最小的分在一组,如果不行就最大的单独分一组,这样贪心下来就是最少分的组了。

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            int weight = sc.nextInt();//最大权值
            int num = sc.nextInt();//纪念品个数
            int arr[] = new int[num];
            for (int i = 0; i < num; i++) {
                arr[i] = sc.nextInt();
            }
            Arrays.sort(arr);
            int count = 0;//方案个数
            int l=0,r=num-1;
            while (l<=r){//一定要有等号
                if(arr[l]+arr[r]<=weight){
                    l++;
                    r--;
                    count++;
                }else {
                    r--;
                    count++;
                }
            }
            System.out.println(count);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

  • 相关阅读:
    明年亮相香港与新加坡!Polkadot 区块链学院欢迎 Web3 革新者报名
    内网ip如何变成公网ip?快解析转换域名映射外网访问
    Flask在线部署ChatGLM2大模型
    如何提升产品经理的综合素质?
    社区型商场/购物中心会员管理方案
    字节跳动测试岗面试记:二面被按地上血虐,所幸Offer已到手...
    盘点AI的认证
    Redis客户端和服务端如何通信?
    企业人事管理系统
    12--Django-批量插入数据、分页原理、分页器的使用
  • 原文地址:https://blog.csdn.net/m0_63949203/article/details/134278986