硬币找零问题 动态规划问题

来源:互联网 发布:推荐淘宝高达店 编辑:程序博客网 时间:2024/05/18 03:47

看到了http://blog.csdn.net/kangroger/article/details/36036101 这文章,由于我不太懂他的代码,所以我按他的题和思路,写了代码;

思路我就不写了,就是动态规划的思路,先保证局部最优,再慢慢向全局部最优;

#include <iostream>#include <cstring>#include <malloc.h>#include <algorithm>   using namespace std;const int M=100;int coinSum[M];int coinValue[M];void FindMin(int coin[], int money){int i,j,k,temp,min,flag;memset(coinSum, 999, sizeof(int)*M);coinSum[0] = 0;for(i=1; i<=money; i++){min = 999;for(j=0; j<5; j++ ){temp = i-coin[j];if(temp<0) break;if(min > coinSum[temp]+1){min = coinSum[temp]+1;flag = coin[j];}}coinValue[i] = flag;coinSum[i] = min;}printf("coin Sum = %d\n",coinSum[money]);int n = coinSum[money];printf("coin value = ");while(n--){ //这野输出硬币,我用一个小技巧,由于coinValue中存的是新加的硬币//,用当前钱减去硬币值 的 值 ,然后输出这个值的coinvalue,依次类推; printf("%4d ",temp = coinValue[money]);money = money-temp;}}int main(){int coin[5] = {1,2,5,9,10};int money = 18;FindMin(coin, money);return 0;}


原创粉丝点击