请教一个找零钱的算法问题

dorian 2006-02-09 10:02:24
问题如下:
面值为a1的钱币m1个,面值为a2的钱币m2个....面值为an的钱币mn个

现需兑换零钱总量为c

请找出所有可能的组合(不需最少)

记得以前好像看个一个这个问题的解答,可惜忘了,现在找不到了,
那位大虾知道帮忙解答一下
...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mugumugu 2006-05-05
  • 打赏
  • 举报
回复
母函数可解
LiuYinChina 2006-02-10
  • 打赏
  • 举报
回复
类似

/*
求满足以下条件的排列的数量:
从1到nMax中,选择一些数,使这些数的和等于nSum
/**/

int function(int nSum, int nMax);
void function(int nBegin, int nEnd, int nValue);
void print();

int g_nCnt = 0;

int _tmain()
{
cout << function(7, 8) << endl;
return 0;
}

int g_Array[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int function(int nSum, int nMax)
{
g_nCnt = 0;
function(1, nMax, nSum);
return g_nCnt;
}

void function(int nBegin, int nEnd, int nValue)
{
for (int i=nBegin; i<=nEnd; ++i) {
if (g_Array[i] == 0) {
continue;
}

if (i == nValue) {
g_Array[i] = 0;
print();
g_Array[i] = i;

g_nCnt++;
return;
}
else if (i < nValue) {
g_Array[i] = 0;
function(i, nEnd, nValue - i);
g_Array[i] = i;
}
else {
return;
}
}
}

void print()
{
for (int i=0; i<sizeof(g_Array)/sizeof(int); ++i) {
if (g_Array[i] == 0) {
cout << i << ", ";
}
}

cout << endl;
}

寻开心 2006-02-09
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4313/4313381.xml?temp=.8327143
寻开心 2006-02-09
  • 打赏
  • 举报
回复
a1*x1 + a2*x2 + ... + an*xn = c
0<=x1<=m1
0<=x2<=m2
。。。。。。
0<=xn<=mn

这个方程组的整数解

用线性规划可解决,本坛子的老帖子很多
chenzhichao2008 2006-02-09
  • 打赏
  • 举报
回复
背包问题,自己搜一下

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧