zoukankan      html  css  js  c++  java
  • 【贪心】【Uva11292】 勇者斗恶龙

    直接用白书上的翻译吧

    例题1  勇者斗恶龙(The Dragon of Loowater, UVa 11292)

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

    【输入格式】

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

    【输出格式】

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

    【样例输入】

    2 3

    5

    4

    7

    8

    4

    2 1

    5

    5

    10

    0 0

    【样例输出】

    11

    Loowater is doomed!


    【分析】

    能力强的骑士开价高是合理的,但如果被你派去砍一个很弱的头,就是浪费人才了。因此,可以把雇佣来的骑士按照能力从小到大排序,所有头按照直径从小到大排序,一个一个砍就可以了。当然,不能砍掉“当前需要砍的头”的骑士就不要雇佣了

    证明;

          从资金最少考虑  显然正确。若不这样做可能反而会砍不掉所有头。a[i]能砍  a[i+1]能砍 显然用a[i],并且a[i+1]可能以后还有更大的发挥空间.

          从能将所有头砍掉的角度来看   若a[i]刚好砍掉 那么[1..i]的被舍弃骑士显然也不能砍掉 所以这个角度也是正确的


    代码:

    #include<stdio.h>
    #include<stdlib.h>
    int engry[20100];
    int len[20100];
    int cmp(const void *i,const void *j)
    {
    		return *(int *)i-*(int *)j;	 
    }
    int main()
    {
    	int m,n,i,j=0,ans;
    	while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0))
    	{
    			ans=0;j=1;
    			for(i=1;i<=n;i++)
    			scanf("%d",&len[i]);
    			for(i=1;i<=m;i++)
    			scanf("%d",&engry[i]);
    			if(n>m) { printf("Loowater is doomed!
    ");continue;}
    		    qsort(len+1,n,sizeof(len[1]),cmp);
    		    qsort(engry+1,m,sizeof(engry[1]),cmp);
    		    for(i=1;i<=n;i++)
    			 {
    			 while(j!=m+1)
    			 {
    			 	if(engry[j]>=len[i])
    			 	{
    			 		ans+=engry[j];
    			 		j++;break;
    			 	}
    			 	j++;
    			 }
    		 		if(j==m+1&&i!=n) break;
    			}
    			if(i!=n+1) printf("Loowater is doomed!
    ");
    			else printf("%d
    ",ans);
    	}
    	return 0;
    }


       

  • 相关阅读:
    Binary search tree
    搜索二叉树
    windows最基本命令行
    sublime package
    二叉树的层次遍历和其深度
    二叉树后序遍历
    PopupWindow的使用
    android之ViewPager的使用
    android部分开发摘要
    android4.0以后要求网络请求必须发生在子线程中
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480470.html
Copyright © 2011-2022 走看看