zoukankan      html  css  js  c++  java
  • Strange Bank(找零问题)

    题目描述

    为了使取钱变得困难,某家银行在一次操作中只允许其客户提取下列金额之一:

    1日元(日本的货币)

    6日元,62(=36)日元,63(=216)日元,…

    9日元,92(=81)日元,93(=729)日元,…

    总共需要多少个操作才能取出N日元?

    您取的钱不能再存入银行。

     

    约束

    1≤N≤100000

    N是整数。

    输入

    输入来自标准输入,格式如下:

    N

    输出

    如果总共需要提取N日元,则打印x。


    样例输入 Copy

    127
    

    样例输出 Copy

    4
    

    提示

    By withdrawing 1 yen, 9 yen, 36(=62) yen and 81(=92) yen, we can withdraw 127 yen in four operations.
    类似于:dp完全背包
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<map> 
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long ll; 
    #define INF 0x3f3f3f3f
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int dp[100010];
    int a[100],p;
    int n;
    void inint(){
        scanf("%d",&n);
    }
    void inint1()
    {
        int ans=1;
        p=0;
        for(int i=1;i<=5;i++)
        {
            ans*=9;
            a[p++]=ans;
        }
        ans=1;
        for(int i=1;i<=6;i++)
        {
            ans*=6;
            a[p++]=ans;
        }
        a[p++]=1;
        sort(a,a+p);
    }
    int main()
    {
        inint();
        inint1();
        for(int i=1;i<=n;i++)
            dp[i]=INF;
        for(int i=0;i<p;i++)  //硬币面值
        {
            for(int j=a[i];j<=n;j++)//dp[j]表示总数为j时所需的硬币数
                dp[j]=min(dp[j],dp[j-a[i]]+1);//dp[j-A]表示总和为j-A时,所需的硬币数,而且dp[j-A]+1也可使面值恰好为t
        }
        printf("%d
    ",dp[n]);
        return 0;
    }
  • 相关阅读:
    react-redux-reducer
    react-redux-action
    node-express-2-jade
    node-express-1
    vuex-Module
    vuex-Action(异步)
    vuex-Mutation(同步)
    vuex-getter
    vuex-state
    ##DAY7 UINavigationController
  • 原文地址:https://www.cnblogs.com/lipu123/p/12270290.html
Copyright © 2011-2022 走看看