• 美团2017秋招笔试题 拼凑钱币


    给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。 
    输入描述:
    输入包括一个整数n(1 ≤ n ≤ 10000)
    输出描述:
    输出一个整数,表示不同的组合方案数


    设f[i][j]为使用a[0]-a[i]的面额凑到j元的不同组合个数
    #include <iostream>
    #include <cstring>
    using namespace std;
    int a[6] = {1,5,10,20,50,100};
    long long f[6][10001];
    int main(){
        int n;
        cin >> n;
        memset(f, 0, sizeof(f));
        for(int j = 0; j <= n; j++){
            f[0][j] = 1;
        }
    
        for(int i = 1; i < 6; i++){
            for(int j = 1; j <= n; j++){
                for(int k = 0; k <= j/a[i]; k++){
                    f[i][j] += f[i-1][j-k*a[i]];
                }
            }
        }
        cout << f[5][n] << endl;
        return 0;
    }
  • 相关阅读:
    java 多线程2
    java 多线程1
    java Object
    java 模板
    03015_JSTL技术
    运维人员常用的Linux命令总结
    oracle的userenv和nls_lang详解
    Oracle字符集检查和修改
    sql语句中(+)的作用
    Oracle事务Transaction
  • 原文地址:https://www.cnblogs.com/loading4/p/7103343.html
Copyright © 2020-2023  润新知