题目背景
你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有n个头,恶龙到处杀人放火。你着急了。不过天无绝人之路,现在来了一个骑士团。里面有m位成员(往下看)
题目描述
每个人都可以砍掉一个大小不超过(<=)z的头,要money个金币,求最小花费。
输入输出格式
输入格式:
第一行两个整数 n m
下接n行,一个整数 表示n个头的大小。
下接m行,每个人可以砍的头大小或金币(金币==头的大小)。
输出格式:
一个整数,最小花费。如果无解,输出“you died!”
输入输出样例
说明
1<=n,m<=20000
思路:排序+枚举 难度:普及/提高-
#include<algorithm> #include<cstdio> using namespace std; int n, m, k = 1; int sum, tot; int a[20005], b[20005]; int main() { scanf("%d%d", &n, &m); if(n > m) { printf("you died!"); return 0; } for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 1; i <= m; i++) scanf("%d", &b[i]); sort(a+1, a+n+1); sort(b+1, b+m+1); for(int i = 1; i <= n; i++) for(int j = k; j <= m; j++) if(a[i] <= b[j]) { sum += b[j]; k = j+1; tot++; break; } if(tot == n) printf("%d", sum); else printf("you died!"); return 0; }