2021寒假每日一題《貨幣系統》

貨幣系統

題目來源:usaco training 2.3
時間限制:1000ms 內存限制:64mbjava

題目描述

給定 \(V\) 種貨幣(單位:元),每種貨幣使用的次數不限。
不一樣種類的貨幣,面值多是相同的。
如今,要你用這 \(V\) 種貨幣湊出 \(N\) 元錢,請問共有多少種不一樣的湊法。shell

輸入格式

第一行包含兩個整數 \(V\)\(N\)
接下來的若干行,將一共輸入 \(V\) 個整數,每一個整數表示一種貨幣的面值。spa

輸出格式

輸出一個整數,表示所求總方案數。code

數據範圍

\(1 ≤ V ≤ 25\) ,
\(1 ≤ N ≤ 10000\) ,
答案保證在 C/C++:long long Java:long 範圍內。內存

樣例輸入

3 10
1 2 5

樣例輸出

10

解題思路

解題代碼-Java

import java.util.*;

public class Main {
    static long getPlanCount(int[] money, int n) {
        int len = money.length;
        long[][] dp = new long[len + 1][n + 1];
        dp[0][0] = 1;

        for (int i = 1; i <= len; i++) {
            int vi = money[i - 1];
            for (int j = 0; j <= n; j++) {
                dp[i][j] = dp[i - 1][j];
                if (j >= vi) {
                    dp[i][j] += dp[i][j - vi];
                }
            }
        }
        return dp[len][n];
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int v = input.nextInt();
        int n = input.nextInt();
        int[] money = new int[v];
        for (int i = 0; i < v; i++) {
            money[i] = input.nextInt();
        }
        input.close();
        System.out.println(getPlanCount(money, n));
    }
}
相關文章
相關標籤/搜索