恐怖水母
Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3551, Total Submissions: 6402
Description
比基堡海滩有一个有n个触手的恐怖水母,蟹老板希望雇佣一些海绵宝宝把它杀死(即砍掉所有触手)。现在有m个海绵宝宝可以雇佣,一个能力值为x的海绵宝宝可以砍掉恐怖水母一只直径不超过x的触手,且需要支付x个金币。如何雇佣海绵宝宝才能杀死水母,并且支付的金币最少?需要注意一个海绵宝宝只能砍掉一只触手,并且不能被雇佣两次。
Input
第1行为正整数n和m,第2行为水母n只触手的直径,第3行为m个海绵宝宝的能力值,所有数据用空格间隔。
Output
输出最少金币数。如果无解,输出NULL
Sample Input
2 3 5 4 7 8 4
Sample Output
11
答案如下:
#include<stdio.h>
int main()
{
int n,m,i,j,temp,s=0,flag=0;
scanf("%d%d",&n,&m);
int a[n],b[m];
//输入数据
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
//将触手直径从小到大排序
for(i=0;i<n-1;i++)
{
for(j=i;j<n;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
//将海绵宝宝能力值从小到大排序
for(i=0;i<m-1;i++)
{
for(j=i;j<m;j++)
{
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
if(n>m)
{
printf("NULL");
}
else
{
j=0;
for(i=0;i<n;i++)
{
while(b[j]<a[i]&&j<m)
{
j++;
a[i]==0;
}
s+=b[j];
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
{
break;
}
flag=1;
printf("NULL");
}
if(flag==0)
{
printf("%d",s);
}
}
return 0;
}