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

中古世界的恶龙[The Drangon of Loowater,UVa 11292]

时间:2018-03-02 22:04:42      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:clu   固定   using   属性   分享   内存   超过   string   div   

时间限制:1 s   内存限制:256 MB

【题目描述】

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

【输入格式】

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

【输出格式】

输出最小花费。如果无解,输出"Loowater is doomed"。(无解的情况为龙头砍不完)

【样例输入】

2 3
5
4
7
8
4

【样例输出】

11

【提示】

小酒馆里向来是可以寻得大量雇佣军的。

雇佣兵战斗属性较强,但属性固定,不能增强或升级。

雇主是不需要为雇佣兵的伤亡负责的。

【来源】

The Dragon of Loowater,UVa 11292,数据来自[Chen Hao,Algorithms Consult]

解法:

贪心。

龙头的大小从大到小排个序,骑士的能力从大到小排个序。

对于当前龙头,在骑士中选一个还未选过的并且能砍掉当前龙头的去砍。

注意:一个骑士只能被选一次。

 

数组写法:

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring>
 6 #include<map>
 7 #include<queue>
 8 #define mod 10000
 9 #define inf 336860180
10 #define PI 3.1415926
11 #define ll long long
12 using namespace std;
13 const int N=1e6;
14 int ans,n,m,l,x,p;
15 int a[N],b[N];
16 int main()
17 {
18     freopen("DragonUVa.in","r",stdin);
19     freopen("DragonUVa.out","w",stdout);
20     scanf("%d%d",&n,&m);
21     for(int i=1;i<=n;++i) scanf("%d",&a[i]);
22     sort(a+1,a+n+1);
23     for(int i=1;i<=m;++i) scanf("%d",&b[i]);
24     sort(b+1,b+m+1);
25     l=1;
26     for(int i=1;i<=n;++i)
27     {
28         x=lower_bound(b+l,b+m+1,a[i])-b;
29         if(x>m) break;
30         l=x+1;
31         ans+=b[x];p++;
32     }
33     if(p<n) cout<<"Loowater is doomed";
34     else cout<<ans;
35     return 0;
36 }
View Code

 

multiset写法:

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<set>
 4 #include<algorithm>
 5 using namespace std;
 6 #define N 20005
 7  
 8 int n,m;
 9 int dra[N];
10 multiset<int>se;
11  
12 inline int read() 
13 {
14     int tmp=0,w=1;
15     char ch=0;
16     while(ch<0||ch>9) {if(ch==-) w=-1;ch=getchar();}
17     while(ch>=0&&ch<=9) tmp=(tmp<<1)+(tmp<<3)+ch-0,ch=getchar();
18     return tmp*w;
19 }
20  
21 int main()
22 {
23     freopen("DragonUVa.in","r",stdin);
24     freopen("DragonUVa.out","w",stdout);
25     n=read(),m=read();
26     if(n>m) {printf("Loowater is doomed\n");return 0;}
27     for(int i=1;i<=n;++i) dra[i]=read();
28     int x;
29     se.insert(1e9);
30     for(int i=1;i<=m;++i) x=read(),se.insert(x);
31     int ans=0;
32     sort(dra+1,dra+1+n);
33     for(int i=1;i<=n;++i) 
34        {
35         set<int>::iterator x=se.lower_bound(dra[i]);
36         if(*x==1e9) {printf("Loowater is doomed\n");return 0;}
37         ans=ans+*x;
38         se.erase(x);
39     }
40     printf("%d\n",ans);
41     return 0;
42 }/*
43 2 1
44 5
45 5
46 10
47 */
View Code

(?′?‵?)I L???????

中古世界的恶龙[The Drangon of Loowater,UVa 11292]

标签:clu   固定   using   属性   分享   内存   超过   string   div   

原文地址:https://www.cnblogs.com/adelalove/p/8494878.html

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