硬币问题
Description
有n种硬币,面值分别为 V1,V2,…,Vn。每种都有无限多。给定非负整数S,问可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 1<=n<=100,0<=S<=10000,1<=Vi<=S;
首先确定状态也就是面值数额,最大值考虑的时候和嵌套矩形类似。
int d[10005];//用来储存每种面值数额的值
int V[105]; //用来存放不同种硬币的面值。
void Initdp()
{
memset(d,-1,sizeof(d); //这里要初始化 d数组。
return ;
}
int dp(int S) //状态是面值数额 S
{
if(d[S]>=0) //为什么要>=0 而不是大于0 因为当S为0的时候,d[0]=0,所以这种情况要考虑进来
return d[s];
d[s]=0;
for(<