码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-10 19:02:51      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:排序   输入输出   space   using   i++   ret   while   大小   最小花费   

题目背景

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

 

 

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

标签:排序   输入输出   space   using   i++   ret   while   大小   最小花费   

原文地址:http://www.cnblogs.com/LuRenJiang/p/7501634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!