C語言——恐怖水母(貪心演算法)
阿新 • • 發佈:2019-01-09
恐怖水母
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; }