/**
硬币问题,用最少与最多数量的1,3,5面值硬币,凑单
**/
#include <stdio.h>
#include <string.h>
#define MAX_V 20
#define coin_variety 3
int main()
{
int V[coin_variety] = {1,3,5};
int i,j,min[MAX_V],max[MAX_V],min_path[MAX_V];
for(i = 0; i < MAX_V; i++)
{
max[i] = 0;
min[i] = 999;
min_path[i]=1;
}
min[0]=0,min[1]=1;
max[0]=0;max[1]=1;
for (i = 0; i < MAX_V; i++)
{
for ( j = 0; j < coin_variety; j++)
{
if(i >= V[j])
{
if(min[i-V[j]]+1<min[i])
{
min[i]=min[i-V[j]]+1;
min_path[min[i]] = V[j];
}
if (max[i-V[j]]+1>max[i])
{
max[i]=max[i-V[j]]+1;
}
}
}
printf("min[%d]:%d path:",i,min[i]);
for (j = 1; j <= min[i];j++)
{
printf("%d ",min_path[j] );
}
printf("\n");
}
return 0;
}
动态规划之硬币凑单