• Java实现蓝桥杯勇者斗恶龙


    勇者斗恶龙

    你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头)。
    村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,
    且需要支付x个金币。如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?
    注意,一个骑士只能砍一个头(且不能被雇佣两次)。

    [输入]
    输入包含多组数据。每组数据的第一行为正整数n和m(1≤n,m≤20 000);
    以下n行每行为一个整数,即恶龙每个头的直径;
    以下m行每行为一个整数,即每个骑士的能力。输入结束标志为n=m=0。

    [输出]
    对于每组数据,输出最少花费。如果无解,输出“Loowater is doomed!”。

    [样例输入]
    2 3
    5
    4
    7
    8
    4
    2 1
    5
    5
    10
    0 0

    [样例输出]
    11
    Loowater is doomed!

    package 第六次模拟;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Demo4勇者斗恶龙 {
    	public static void main(String arg[]) {
    		final int maxn = 20000 + 5;
    		int[] A = new int[maxn];
    		int[] B = new int[maxn];
    		Scanner sc = new Scanner(System.in);
    		while (sc.hasNext()) {
    			//有n  m控制,不需要重置数组
    			int n = sc.nextInt(), m = sc.nextInt();
    			//结束的标志 0 0
    			if(n==0&&m==0)return;
    			for (int i = 0; i < n; i++)
    				A[i] = sc.nextInt();
    			for (int i = 0; i < m; i++)
    				B[i] = sc.nextInt();
    			Arrays.sort(A, 0, n);
    			Arrays.sort(B, 0, m);//数组从0到m范围从小到大排序
    		
    			int cost = 0, num = 0;
    			for (int i = 0; i < m; i++) {
    				//只要勇士打得过就打,因为是从小到大排序了
    				//所以只要打的过一定是打得过的最小的那个,花费最小
    				if (A[num] <= B[i])
    					cost += B[i];
    				//每次我都++,直到把所有的龙都打死
    				if (++num == n)
    					break;
    			}
    			if (num < n)
    				System.out.println("Loowater is doomed!");
    			else
    				System.out.println(cost);
    		}
    	}
    
    
    }
    
    
  • 相关阅读:
    用遗传算法解决子集和问题
    XML映射配置文件
    generator插件配置方式使用
    声明
    spring IOC简单分析
    模板模式
    原型模式
    委派模式,策略模式
    单例模式2
    单例模式
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076001.html
Copyright © 2020-2023  润新知