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

绿色系列2,

这个题我交了一二三四遍,,,

其实感觉自己最不擅长的就是这种题,

其实很简单,(其实很自然,的就唱出了杨宗纬的空白格。

详情请见:https://www.cnblogs.com/Mary-Sue/p/9119345.html

就是思路题。。。

但一般来讲,,,像我这么菜的人马上就去模拟了。。。

而且都不会过,,,因为一般来讲肯定有很多很多很多特殊情况。

所以就要想正解的思路了。

我觉得代码很清楚,,

关键是思路。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int n,m,a[20002],b[20002],ans,t,q;
 9 
10 int main()
11 {
12     scanf("%d%d",&n,&m);
13     for(int i=1;i<=n;++i)
14         scanf("%d",&a[i]);
15     for(int i=1;i<=m;++i)
16         scanf("%d",&b[i]);
17     sort(a+1,a+n+1);
18     sort(b+1,b+m+1);
19     if(b[m]<a[n])
20     {
21         printf("you died!");
22         return 0;
23     }
24     int i=1,j=1;
25     while(i<=n&&j<=m)
26     {
27         if(a[i]<=b[j])
28         {
29             ans+=b[j];
30             i++;
31             j++;
32         }
33         else j++;        
34     }
35     if(i>n)
36     {
37         printf("%d",ans);
38         return 0;
39     }
40     else printf("you died!");
41     return 0;
42 }
原文地址:https://www.cnblogs.com/Mary-Sue/p/9118706.html