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