P2695题求助,70分
  • 板块学术版
  • 楼主MaxMa
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/24 19:42
  • 上次更新2024/3/24 21:11:07
查看原帖
P2695题求助,70分
1036978
MaxMa楼主2024/3/24 19:42

骑士的工作

题目背景

你作为一个村的村长,保卫村庄是理所当然的了。今天,村庄里来了一只恶龙,他有 nn 个头,恶龙到处杀人放火。你着急了。不过天无绝人之路,现在来了一个骑士团。里面有 mm 位成员(往下看)。

题目描述

每个人都可以砍掉至多一个大小不超过 ziz_i 的头,需要 ziz_i 个金币,求最小花费。

输入格式

第一行两个整数 nn,mm。

下接 nn 行,一个整数表示 nn 个头的大小。

下接 mm 行,每个人可以砍的头大小和需要的金币数 z1,⋯ ,zmz_1, \cdots, z_m。

输出格式

一个整数,最小花费。如果无解,输出 you died!。

样例 #1

样例输入 #1

2 3
5 
4
7 
8
4

样例输出 #1

11

提示

对于所有数据,1≤n,m≤3×1041 \le n,m \le3 \times 10^4,1≤zi≤1051 \leq z_i \leq 10^5。

#include<bits/stdc++.h>
using namespace std;
int n,m,n1[20005],z[20005];
int main(){
	cin>>n>>m;
	int sum=0,q=0,p=1;		
	for(int i=1;i<=n;i++)
		cin>>n1[i];
	for(int i=1;i<=m;i++)
		cin>>z[i];
	if(n>m) cout<<"you died!";
	sort(z+1,z+m+1);
	sort(n1+1,n1+n+1);
	for(int j=1;j<=m;j++){				
			if(z[j]>=n1[p]){
				sum=sum+z[j];
		        p++;
			}
			if(p==n+1){						 
				q=1;						
				break;					
			}
		}
		if(q==1)cout<<sum<<endl;
		else puts("you died!");
	return 0;
}
2024/3/24 19:42
加载中...