C语言——恐怖水母(贪心算法)



恐怖水母

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;
}

 

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/chengchencheng/article/details/78509449
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞