动态归化 找零钱
来源:互联网 发布:w7本机ip端口查询器 编辑:程序博客网 时间:2024/04/29 06:25
/*动态规划 找零钱
10月18,2006
版本1
薛向旭
//算法意思为:要用最低j个面值找好i的钱,那么分为两种情况,1:只用j-1个面值 2 至少用一个第j面值,
在这两种情况中取一个小的,而这两种情况都有一个参数比要求的表达式的参数小。所以可以递推出来。
我认为算法的核心是:确认上一步的成果,并利用之。
*/
#include <iostream>
using namespace std;
#define INF 999999
int num =3;
int N=100;
int d[4]={0,1,4,6};
int c[101][4]; //c[j][i] ,j表示要找的面值, i表示用到的货币数量(从小往大数) c[j][0]==INF可以让算法更明了
int FIR[101][4][4]; //FIR[i][j][k] i零钱数量 j表示用到的货币数量(从小往大数) k每张面值需要几张
int min(int a, int b)
{
if( a < b)
return a;
return b;
}
void test1()
{
memset(c,INF,sizeof(c));
memset(FIR,0,sizeof(FIR));
c[1][1] =1;
c[1][2] =1;
c[1][3] = 1;
FIR[1][1][1] = 1;
FIR[1][2][1] = 1;
FIR[1][3][1] = 1;
c[2][1] =2;
c[2][2] =2;
c[2][3] =2;
FIR[2][1][1] =2;
FIR[2][2][1] =2;
FIR[2][3][1] =2;
c[3][1] =3;
c[3][2] =3;
c[3][3] =3;
FIR[3][1][1] =3;
FIR[3][2][1] =3;
FIR[3][3][1] =3;
c[4][1] =4;
c[4][2] =1;
c[4][3] =1;
FIR[4][1][1] =4;
FIR[4][2][2] =1;
FIR[4][3][2] =1;
c[5][1]=5;
c[5][2] =2;
c[5][3] =2;
FIR[5][1][1] =5;
FIR[5][2][1] =1;
FIR[5][2][2] = 1;
FIR[5][3][1] =1;
FIR[5][3][2] = 1;
c[6][1] =6;
c[6][2] =3;
c[6][3] =1;
FIR[6][1][1] =6;
FIR[6][2][1] =2;
FIR[6][2][2] =1;
FIR[6][3][3] =1;
int i=7;
int j,k;
while(i<=100) //如何不用最大面值? tmp == c[i-1,j]
{
for(j=1;j<=3;j++)
{
c[i][j] = min( c[ i-d[j] ] [j] +1, c[i][ j-1] );
if( c[ i-d[j] ] [j] +1 < c[i][ j-1]) //1 用一张面值j
{
for(k=1;k<=3;k++)
{
FIR[i] [j][k] = FIR[ i-d[j] ] [j] [k];
}
FIR[i] [j][j]++;
}
else
{
for(k=1;k<=3;k++)
{
FIR[i] [j][k] = FIR[ i ] [j-1] [k];
}
}
}
i++;
}
}
void test2()
{
memset(c,0,sizeof(c));
}
int main()
{
test1();
cout<<"零钱 : "<<"d[1]=1 "<<"d[2]=4 "<<"d[3]=6 "<<endl;
int i=1;
while(i<=100){
cout<<i<<"需要总张数:"<<c[i][3]<<" 各自数量: "<<FIR[i][3][1]<<" "<<FIR[i][3][2]<<" "<<FIR[i][3][3]<<" "<<endl;
i++;
}
return 0;
}
- 动态归化 找零钱
- 找零钱-动态规划
- 动态规划:找零钱问题
- 动态规划 找零钱问题
- 动态规划找零钱问题
- 动态规划——找零钱问题
- 动态规划之找零钱问题
- 动态规划解决找零钱问题
- 动态规划经典联系题----找零钱
- 【动态规划】—找零钱问题
- 动态规划1:找零钱练问题
- 动态规划5:找零钱问题
- 动态规划解决找零钱问题
- 动态规划之找零钱问题
- 数据结构-动态规划之找零钱
- 找零钱
- 找零钱
- 找零钱
- IE全屏最简单的代码
- 有问题的DLL文件
- SQL备份与还原经典文档
- Network Programming for Windows读书笔记9
- 数据库设计范式
- 动态归化 找零钱
- 开通记要
- 《Selling - Building Partnerships》- 组织性购买行为及其过程
- 验证视图MAC失败 Validation of ViewState MAC Failed
- O/R Mapping前身:自定义实体类
- 人一生会遇到的10种人
- 交换机中MAC地址老化时间测试
- 用VB进行SQL2000的数据备份和恢复
- 易筋经、降龙十八掌在英语中如何翻译