zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯 算法训练 纪念品分组

    问题描述
      元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时 间内发完所有纪念品,乐乐希望分组的数目最少。
      你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
    输入格式
      输入包含n+2行:
      第1行包括一个整数w,为每组纪念品价格之和的上限。
      第2行为一个整数n,表示购来的纪念品的总件数。
      第3~n+2行每行包含一个正整数pi (5 <= pi <= w),表示所对应纪念品的价格。
    输出格式
      输出仅一行,包含一个整数,即最少的分组数目。
    样例输入
    100
    9
    90
    20
    20
    30
    50
    60
    70
    80
    90
    样例输出
    6
    数据规模和约定
      50%的数据满足:1 <= n <= 15
      100%的数据满足:1 <= n <= 30000, 80 <= w <= 200

    import java.util.Arrays;
    import java.util.Scanner;
    
    
    public class jinianpinfenzu {
    	public static void main(String[] args) {
    		Scanner sc =new Scanner(System.in);
    		int w = sc.nextInt();
    		int n = sc.nextInt();
    		int [] num = new int [n+1];
    		for (int i = 1; i < num.length; i++) {
    			num[i]=sc.nextInt();
    		}
    		Arrays.sort(num);
    		int count = 0;
    		for (int i = 1,j=num.length-1; i<=j;) {
    			if(i==j){
    				count++;
    				break;
    			}
    			if(j-i==1){
    				count++;
    				break;
    			}
    			if(num[i]+num[j]<=w){
    				count++;
    				i++;
    				j--;
    			}
    			else{
    				j--;
    				count++;
    			}
    		}
    		System.out.println(count);
    	}
    
    }
    
    
  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078563.html
Copyright © 2011-2022 走看看