2019独角兽企业重金招聘Python工程师标准>>>
使用3枚币值分别为 1、3、4的硬币兑换11,最少需要几枚硬币。注意此题属于恰好装满的情况,需注意初始化,数组F(0)为0,其余的为正极大值或极小值(具体是极大还是极小,视状态转移方程中取的是min还是max)
#include
#include
using std::cout;
using std::endl;
int arr_coin[3]={1,3,4};
int n=11;
int arr_c[4][12];
void init()
{
for(int i=0;i<4;++i)
for(int j=0;j
for(int i=0;i<4;++i)
arr_c[i][0]=0;
}
int charge()
{
for(int j=1;j<=n;++j)
{
for(int i=1;i<=3;++i)
{
if(j
arr_c[i][j]=arr_c[i-1][j];
}
arr_c[i][j]=std::min(arr_c[i-1][j], arr_c[i][j-arr_coin[i-1]]+1);
}
}
return arr_c[3][n];
}
int main(int argc, char** argv)
{
std::system("clear");
init();
for(int i=0;i<4;++i)
{
for(int j=0;j
cout << endl;
}
cout << endl;
cout << charge() << endl;
}
########################
输出:
0 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
0 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
0 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
0 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
3