问题:比基堡海滩有一个有n个触手的恐怖水母,蟹老板希望雇佣一些海绵宝宝把它杀死(即砍掉所有触手)。现在有m个海绵宝宝可以雇佣,一个能力值为x的海绵宝宝可以砍掉恐怖水母一只直径不超过x的触手,且需要支付x个金币。如何雇佣海绵宝宝才能杀死水母,并且支付的金币最少? 需要意一个海绵宝宝只能砍掉一只触手,并目不能被雇佣两次。
解决方案:
可利用下置函数将水母触手直径大小n、海绵宝宝的能力值m输入两个数组N[]和M[],再进行冒泡排序。
void f(int A[],int n)
{
for (int i=0; i<n-1; i++)
{
for (int j=0; j<n-i-1; j++)
{
if (A[j]>A[j+1])
{
int t=A[j];
A[j]=A[j+1];A[j+1]=t;
}
}
}
}
由数学知识可知,对于一定的触手直径n,只需要找到大于n的最小的能力值m去执行任务就能保证所花费的钱最少,因此可以利用下述函数解决问题:
int sum=0;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
if (M[j]>=N[i])
{
sum=sum+M[j];
break;
}
}
}
简洁明了!只需输出sum即可。