• 骑士的工作


    题目背景

    你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有n个头,恶龙到处杀人放火。你着急了。不过天无绝人之路,现在来了一个骑士团。里面有m位成员(往下看)

    题目描述

    每个人都可以砍掉一个大小不超过(<=)z的头,要money个金币,求最小花费。

    输入输出格式

    输入格式:

    第一行两个整数 n m

    下接n行,一个整数 表示n个头的大小。

    下接m行,每个人可以砍的头大小或金币(金币==头的大小)。

    输出格式:

    一个整数,最小花费。如果无解,输出“you died!”

    输入输出样例

    输入样例#1: 
    2 3
    5 
    4
    7 
    8
    4
    输出样例#1: 
    11

    说明

    1<=n,m<=20000

    分析:

    贪心的基础题,将两者分别排序,然后扫一遍b,用一个指针对应指a,如果当前位置可以做到,就把指针后移一位。

    CODE:

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 const int M=200005;
     8 int n,m;
     9 int a[M],b[M],ans;
    10 int cnt=1;
    11 inline int get(){
    12     char c=getchar();
    13     int res=0;
    14     while (c<'0'||c>'9') c=getchar();
    15     while (c>='0'&&c<='9'){
    16         res=(res<<3)+(res<<1)+c-'0';
    17         c=getchar();
    18     }
    19     return res;
    20 }
    21 int main() {
    22     n=get(),m=get();
    23     for (int i=1;i<=n;i++) a[i]=get();
    24     for (int i=1;i<=m;i++) b[i]=get();
    25     sort(a+1,a+n+1);
    26     sort(b+1,b+m+1);
    27     for (int i=1;i<=m&&cnt<=n;i++)
    28         if (b[i]>=a[cnt]) cnt++,ans+=b[i];
    29     if (cnt<=n) cout<<"you died!"<<endl;
    30     else cout<<ans<<endl;
    31     return 0;
    32 }
  • 相关阅读:
    Linux命令(一)
    数据库SQL学习(一)
    Eclipse
    VsCode支持的markdown语法参考(一)
    常用算法Tricks(一)
    dispose方法的使用
    收藏一个链接
    我还不知道取什么名字
    NioSocket的用法
    随便乱塞塞2~
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11150284.html
Copyright © 2020-2023  润新知