#include<stdio.h>
#include<string.h>
#define Min(a,b) (a < b ? a : b)
int main()
{
int n, t;
while (~scanf("%d%d",&n,&t) && n + t != 0)
{
int i, j, a[100] = {0};
for (i = 1; i <= n; i++)
scanf("%d",&a[i]);
int dp[t+1]; // t+1表示钱,dp表示最少硬币数
memset(dp, 'a', sizeof(dp));
dp[0] = 0;
for (i = 1; i <= n; i++)
for (j = a[i]; j <= t; j++)
dp[j] = Min(dp[j], dp[j-a[i]]+1);
printf("%d\n",dp[t]);
}
return 0;
}
本文介绍了一个经典的动态规划问题——硬币找零问题的求解方法,并提供了一段完整的C语言代码实现。该算法通过动态规划的方式,计算出组成特定金额所需的最少硬币数量。
545

被折叠的 条评论
为什么被折叠?



