在每一步都选择看起来"最好的"选项的算法称为贪心算法
这种算法在每一步都选择最好的选项,而不考虑可能导致最优解的所有步骤序列。
例 考虑用25美分、10美分、5美分和1美分硬币找n美分零钱的问题,使硬币总数尽可能少。
可以设计一个找n美分零钱的贪心算法,在每一步都做局部最优的选择。即在每一步选择可加入已找零钱中不超过n美分的最大面值的硬币。例如要找67美分零钱,首先选择一个25美分硬币(剩下42美分);接着选择第二个25美分硬币(剩下17美分),随后选择一个10美分硬币(剩下7美分),随后选择一个5美分硬币(剩下2美分),随后选择一个1美分硬币(剩下1美分),最后选择一个1美分硬币。
#include <stdio.h>
#define LEN 4
void change(int c[],int n)
{
int i;
for(i=0;i<LEN;i++){
while(n>=c[i]){
n-=c[i];
printf("%d ",c[i]);
}
}
putchar('\n');
}
int main(void)
{
int c[LEN]={25,10,5,1};
change(c,67);
return 0;
}