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