zoukankan      html  css  js  c++  java
  • UVA.11292 Dragon of Loowater (贪心)

    UVA.11292 Dragon of Loowater (贪心)

    题意分析

    题干很长,废话很多。 (实在不懂那个图片是干啥)
    现在要你屠龙,有n个头直径为dra[i]的龙,有m个最多能杀掉头直径为kni[i]的骑士(1<= i <=n)。你可去雇佣骑士来杀龙,每个其实的价格为kni[i],现在求屠完所有龙的最小花费是多少,若不能屠完所有的龙, 则要输出 Loowater is doomed!。

    为了保证每一个骑士的价值得到最大的使用,那么就要尽量屠杀不超过kni[i]的最大的直径的龙头。不难想到,我们首先对dra和kni升序排列,挨个比对。如果第一个骑士能屠第一条龙,就赶紧让他屠掉,然后看第二条龙和第二个骑士。若不能,则看第二个骑士是否能屠第一条龙,依次判断。结局共有以下几种:
    1.龙屠完了,骑士也用完了。 任务完成。
    2.龙屠完了,骑士没用完。 任务完成。
    3.龙没屠完,骑士用完了。 任务失败。
    4.龙没屠完,骑士也没用完(可以理解为,没有骑士能屠掉头直径最小的龙)。 任务失败。

    写个循环,然后判断循环变量的最终情况,输出相应结果。
    当然上述情况中第三种是可以在处理数据前就直接判断的,即m < n。

    代码总览

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define nmax 20005
    using namespace std;
    int dra[nmax],kni[nmax];
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m) &&(n||m)){
            for(int i = 0;i<n; ++i) scanf("%d",&dra[i]);
            for(int i = 0;i<m; ++i) scanf("%d",&kni[i]);
            if(m<n){
                printf("Loowater is doomed!
    ");
                continue;
            }
            sort(dra,dra+n);
            sort(kni,kni+m);
            int ans = 0,i,j;
            for( i = 0,j =0; i<n&&j<m; ){
                if(dra[i] <= kni[j]){
                    ans+=kni[j]; i++;j++;
                }else{
                    j++;
                }
            }
            if(i == n){
                printf("%d
    ",ans);
                continue;
            }
            if(j == m && i!= n){
                printf("Loowater is doomed!
    ");
            }
         }
        return 0;
    }
  • 相关阅读:
    Cannot change version of project facet Dynamic web module to 3.0
    mybatis
    mybatis逆向工程工具
    mybatis和jdbc分析
    分析mybatis和jdbc的作用,已经原理
    JDBC使用步骤
    MyBatis架构设计及源代码分析系列(一):MyBatis架构
    MyBatis的foreach语句详解
    vue.js使用elemnetUi
    vue.js路由嵌套传参
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367134.html
Copyright © 2011-2022 走看看