动态规划的题目特点以及求“硬币个数最少”
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划的题目特点以及求“硬币个数最少”相关的知识,希望对你有一定的参考价值。
动态规划的题目特点以及求“硬币个数最少”
1、计数
2、求最大最小值
3、求存在性
实例一
你有三种硬币面值分别是:2元,5元,7元每种硬币足够多
买一本书需要27元
如何用“最少‘’的硬币组合正好付清,不需要对方找钱
找见输出硬币个数,找不见返回-1
#include <stdio.h>
#include <stdlib.h>
#define MAX 100000
//你有三种硬币面别是:2元,5元,7元每种硬币足够多
//买一本书需要27元
//如何用最少的硬币组合正好付清,不需要对方找钱
//找见输出硬币个数,找不见返回-1
int fun(int a[],int m,int n)
int *f = (int*)malloc(sizeof(int)*(m+1));
f[0] = 0;
int i,j;
for(i=1;i<=m;i++)
f[i] = MAX;
for(j=0;j<n;j++)
if(i>=a[j] && f[i-a[j]] != MAX)
f[i] = (f[i-a[j]]+1) > f[i]?f[i]:(f[i-a[j]]+1);
if(f[m] == MAX)
f[m] = -1;
return f[m];
int main()
int a[3] = 2,5,7,m=27;
int n = sizeof(a)/sizeof(int);
int min = fun(a,m,n);//钱的面值,总钱,面值钱的种数
printf("%d",min);
return 0;
确定状态 -> 看最后一步,化成子问题
转移方程->想法转换Wie式子
初始条件和边界情况->用转换方程算不出来,需要手动定义
消除冗余加速计算唉
以上是关于动态规划的题目特点以及求“硬币个数最少”的主要内容,如果未能解决你的问题,请参考以下文章