您的位置:首页 > 其它

UVA - 357 Let Me Count The Ways

2014-11-22 11:55 465 查看
题目大意:有5种硬币, 面值分别为1、5、10、25、50,现在给出金额,问可以用多少种方式组成该面值

解题思路:每种硬币都有无限个,所以是典型的完全背包,但是这一题的数据 n 最大到30000那么如果一直累加中间过程和是会超过int,所以我们必须用long
long ,其它还要注意方案数为1的时候输出比较不同

#include <cstdio>

int main() {
long long n, M[5] = {1, 5, 10, 25, 50}, DP[30005] = {0};
DP[0] = 1;
for (int i = 0; i < 5; i++)
for (int j = M[i]; j < 30005 ; j++)
DP[j] += DP[j-M[i]];

while (scanf("%lld", &n) != EOF) {
printf(n < 5 ? "There is only 1 way" : "There are %lld ways", DP
);
printf(" to produce %lld cents change.\n", n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: