uva357

来源:互联网 发布:微软鼠标驱动 mac 编辑:程序博客网 时间:2024/06/02 01:28

题目大意:
有是一种不同面值的钱币,求利用这些钱币有几种方法可以给出指定的价钱。

思路:
动态规划 有类似题 要扩大100倍就可以避免小数计算
数组开太小WA了一次。注意要用long long

代码:

#include <iostream>using namespace std;#include <stdio.h>#include <cstring>long long dp[30010][15];int coins[11] = {5,10,20,50,100,200,500,1000,2000,5000,10000};long long solve(int i,int sum) {    if(dp[sum][i] != -1)        return dp[sum][i];    dp[sum][i] = 0;    for(int j = i; j < 11 && sum >= coins[j];j++)        dp[sum][i] += solve(j,sum - coins[j]);    return dp[sum][i];}int main() {    double n;    memset(dp,-1,sizeof(dp));    while(scanf("%lf",&n) != EOF) {        if(n == 0.00)            break;        int t = (int )(n * 100 + 0.5);//注意精度        for(int i = 0 ; i < 11; i++)            dp[0][i] = 1;        printf("%6.2f%17lld\n",n,solve(0,t));    }    return 0;}
0 0
原创粉丝点击