zoukankan      html  css  js  c++  java
  • hdu 1284 分硬币 && uva 147

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        unsigned long long int dp[32780];
        memset(dp,0,sizeof(dp));
        dp[0]=1;
        for(int i=1;i<=3;i++)
            for(int j=i;j<32780;j++)
                dp[j]=dp[j]+dp[j-i];
        int n;
        while((scanf("%d",&n))!=EOF)
        {
            printf("%I64d
    ",dp[n]);
        }
        return 0;
        return 0;
    }
    View Code

     

    这两道题基本思路是一样的,不过uva147的输出实在是个大坑,因为double的问题,所以考虑精度的损失。

    代码中的输出部分被我注释掉的那一部分是错误的输出,格式什么的都是正确的,但是存在精度的损失。应该注意一下

    hdu1284

     

    Description

    在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
     

    Input

    每行只有一个正整数N,N小于32768。
     

    Output

    对应每个输入,输出兑换方法数。
     

    Sample Input

    2934 12553
     

    Sample Output

    718831 13137761
     
     
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        unsigned long long int dp[30005];
        int money[]={10000,5000,2000,1000,500,200,100,50,20,10,5};
        memset(dp,0,sizeof(dp));
        dp[0]=1;
        //cout<<money[10]<<endl;
        for(int i=10;i>=0;i--)
        {
            for(int j=money[i];j<30005;j++)
    
            {
                dp[j]=dp[j-money[i]]+dp[j];
            }
        }
        //cout<<dp[0]<<dp[5]<<dp[10]<<dp[15]<<endl;
        double n;
    
        //cin>>n;
        //cout<<dp[5]<<endl;
        //cout<<dp[10020]<<endl;
        int a,b;
        while((scanf("%d.%d",&a,&b))!=EOF&&a+b)
         {
              /*  n=n*100;
                cout<<n;
                int m=n;
         printf("%6.2lf%17I64d
    ",n/100,dp[m]);*/
             int n=a*100+b;//cout<<n<<endl;
        double ans=n*1.0/100.0;
        printf("%6.2lf%17lld
    ",ans,dp[n]);
         }
    
        return 0;
    }
    View Code
    uva 147

    Description

    Download as PDF
     

    New Zealand currency consists of $100, $50, $20, $10, and $5 notes and $2, $1, 50c, 20c, 10c and 5c coins. Write a program that will determine, for any given amount, in how many ways that amount may be made up. Changing the order of listing does not increase the count. Thus 20c may be made up in 4 ways: 1 tex2html_wrap_inline25 20c, 2 tex2html_wrap_inline25 10c, 10c+2 tex2html_wrap_inline25 5c, and 4 tex2html_wrap_inline25 5c.

    Input

    Input will consist of a series of real numbers no greater than $300.00 each on a separate line. Each amount will be valid, that is will be a multiple of 5c. The file will be terminated by a line containing zero (0.00).

    Output

    Output will consist of a line for each of the amounts in the input, each line consisting of the amount of money (with two decimal places and right justified in a field of width 6), followed by the number of ways in which that amount may be made up, right justified in a field of width 17.

    Sample input

    0.20
    2.00
    0.00

    Sample output

      0.20                4
      2.00              293
     
    dp[j]=dp[j]+dp[j-i],j表示钱数,i表示价值。首先i=1,这样得到不同的钱数被全部分为1的硬币的兑换法,然后把大于2的数分解为 2+i,即2+i的钱分为一个2加第i个钱全部
    为1的分法,这么递推下去。
  • 相关阅读:
    每日分享!JavaScript中的表单事件
    每日分享!~ 如何解决获取卷曲高度的问题,document.body.scrollTop为什么在pc端拿不到值
    Unhandled rejection Error: EACCES: permission denied, open '
    每日分享!canvas的使用~
    每日分享!JavaScript的鼠标事件(11个事件)
    每日分享!~ 使用js原生方式对拖拉元素(鼠标的事件)
    每日分享!~ JavaScript(拖拽事件)
    每日分享!~ JavaScript(js数组如何在指定的位置插入一个元素)
    每日分享!~ vue JavaScript中为什么可以读取到字符串的长度!(包装对象)
    let和var以及const有什么区别
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/5302255.html
Copyright © 2011-2022 走看看