【贪心】骑士的工作(P2695)

题目背景

你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有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

分析

水题,运用贪心,将money数组从小到大排序,从小的开始试。

参考代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main()
{
    int n,m;
    int tou_size[20001];
    int money[20001];
    int sum=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%d",&tou_size[i]);
    }
    for(int i=0;i<m;i++){
        scanf("%d",&money[i]);
    }
    sort(tou_size,tou_size+n);
    sort(money,money+m);
    int j=0,k=0;
    while(1){
        if(k>=n||j>=m)
        break;
        if(money[j]>=tou_size[k]){
            sum+=money[j];
            j++;
            k++;
        }else{
            j++;
        }
    }
    if(k<n){
        printf("you died!\n");
    }
    else{
        printf("%d\n",sum);
    }
    return 0;
}
时间: 2024-12-29 12:01:21

【贪心】骑士的工作(P2695)的相关文章

洛谷 P2695 骑士的工作

洛谷 P2695 骑士的工作 题目背景 你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有n个头,恶龙到处杀人放火.你着急了.不过天无绝人之路,现在来了一个骑士团.里面有m位成员(往下看) 题目描述 每个人都可以砍掉一个大小不超过(<=)z的头,要money个金币,求最小花费. 输入输出格式 输入格式: 第一行两个整数 n m 下接n行,一个整数 表示n个头的大小. 下接m行,每个人可以砍的头大小或金币(金币==头的大小). 输出格式: 一个整数,最小花费.如果无解,输出

P2695 骑士的工作

#include<bits/stdc++.h>using namespace std;int n,m,size[1000000],big[1000000];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) { cin>>size[i]; } for(int i=1;i<=m;i++) { cin>>big[i]; } sort(size+1,size+1+n); sort(big+1,big+1

洛谷——P2695 骑士的工作

https://www.luogu.org/problem/show?pid=2695 题目背景 你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有n个头,恶龙到处杀人放火.你着急了.不过天无绝人之路,现在来了一个骑士团.里面有m位成员(往下看) 题目描述 每个人都可以砍掉一个大小不超过(<=)z的头,要money个金币,求最小花费. 输入输出格式 输入格式: 第一行两个整数 n m 下接n行,一个整数 表示n个头的大小. 下接m行,每个人可以砍的头大小或金币(金币==头

uva 10026 Shoemaker&#39;s Problem(贪心+排序)

虽然是个水题,但是在一些细节上wa了几次,好像不支持'\b'退格符号,我用在了输出空格那,结果wa了...白白 wa了几次...题意是看的题解..今天只写了两道题,速度有点慢,得加快了,以后得先认真读懂题目,题目读懂了 就相当于做出来一半然后仔细动脑想想,有想法了再敲,不能盲目的做题.另外,热烈祝贺今天c++ primer看到 了100页 思路: 这道题是让给的数据是每件工作需要做的天数和每耽误一天所需要的费用,让求一个序列使得付费最小,如果有相同答 案把字典树最小的输出...输出的是序号,该件

贪心算法——Huffman 压缩编码的实现

1. 如何理解 "贪心算法" 假设我们有一个可以容纳 100 Kg 物品的背包,可以装各种物品.我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同.怎样装才能让背包里豆子的总价值最大呢? 这个问题其实很简单,我们只需要计算出每种豆子的单价,然后按照单价从高到低依次来装就好了.单价从高到低排列为:黑豆.绿豆.红豆.青豆和黄豆,因此我们往背包里装 20 Kg 黑豆.30 Kg 绿豆和 50 Kg 红豆. 实质上,这就是贪心算法的思想,用贪心算法解决问题的步骤一般是这样的. 第一步,当

[2016-03-14][UVA][11292][Dragon of Loowater]

时间:2016-03-14 19:50:12 星期一 题目编号:[2016-03-14][UVA][11292][Dragon of Loowater] 题目大意: 有m个骑士要砍n条龙,每个骑士能看掉龙的头颅当且仅当其实的能力值大于龙的头的直径,每个其实砍掉一条龙需要付出数值上等于能力值的代价,问m个骑士能否砍完所有龙,能则输出最小代价,否则输出"Loowater is doomed!" 输入: 多组数据 每组数据 n m n行 龙头的直径 m行 骑士的能力值 输出: 如果能砍完所有

关于排序_重点是冒泡

排序有很多种但是 就看你会哪一种了! 选择排序 O(??2) 插入排序 O(??2) 冒泡排序 O(??2) 计数排序 O(?? + ??) 基数排序 O (?? log ??) 桶排序 O(??)~O(??2) 归并排序 O(?? log ??)堆排序 O(?? log ??)快速排序 O(?? log ??) 值得注意的是其中基数排序是我们(或者我)认为是桶排序,但其实并非如此真名是基数排序复杂度(n+m); 如果数字过大的话,值得一提的是最后三种排序使我们最快的排序方法了没有更快的! 如果

1572: [Usaco2009 Open]工作安排Job[贪心]

Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单位时间(!).在任一时刻,他都可以选择编号1~N的N(1 <= N <= 100000)项工作中的任意一项工作来完成. 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能. 对于第i个工作,有一个截止时间D_i(1 <= D_i

【BZOJ1572】[Usaco2009 Open]工作安排Job 贪心

贪心,一开始没读好题想错了,不能直接覆盖,如因为总时间1000000000,所以说在4的时候做3是可以的...没手写堆.. 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <algorithm> 5 using namespace std; 6 int n; 7 struct data{long long t,v;}a[100010]; 8 long long a