您的位置:首页 > 其它

谷歌笔试题-背包问题

2013-08-25 13:14 260 查看
将一个较大的钱,不超过1000000(10^6)的人民币,兑换成数量不限的100、50、10、5、2、1的组合。

此题考查的是一个比较简单的完全背包问题,但是有一个陷阱,注意数据的取值范围,整型数会溢出。

#include <stdlib.h>
#define N 1000005
long long c
;
int change[] ={1,2,5,10,50,100};

long long  findChange(int sum, int* change,int n)
{
int i = 0, j = 0;
c[0] = 1;
for(; i < n; i++)
{
for(j = change[i]; j <= sum; j++)
{
c[j] = c[j - change[i]] + c[j];
}
}
return c[sum];
}

int main()
{
int result = findChange(1000000,change,6);
printf("total kinds: %lld",result);
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: