1. 程式人生 > >C語言——恐怖水母(貪心演算法)

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