【牛客】數字和爲sum的方法數(滴滴筆試)

鏈接:https://www.nowcoder.com/questionTerminal/7f24eb7266ce4b0792ce8721d6259800
來源:牛客網
 

[編程題]數字和爲sum的方法數

給定一個有n個正整數的數組A和一個整數sum,求選擇數組A中部分數字和爲sum的方案數。
當兩種選取方案有一個數字的下標不一樣,我們就認爲是不同的組成方案。

 

輸入描述:

輸入爲兩行:
 第一行爲兩個正整數n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)
 第二行爲n個正整數A[i](32位整數),以空格隔開。


 

輸出描述:

輸出所求的方案數

示例1

輸入

5 15 5 5 10 2 3

輸出

4
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum = sc.nextInt();
        int [] array = new int[n];
        for(int i = 0;i<n;i++){
            array[i] = sc.nextInt();
        }

        long [][]dp = new long[n+1][sum+1];//n個物品和爲sum有多少方案。
        //表示當和爲0是,就只有不取一種方案。
        for(int i = 0;i<=n;i++){
            dp[i][0] = 1;
        }
        //表示沒有數字的時候就沒有方案,但是這裏要注意dp[0][0] = 1
        for(int i = 1;i<=sum;i++){
            dp[0][i] = 0;
        }
        for(int i = 1;i<=n;i++){
            for(int j = 0;j<=sum;j++){
                if(array[i-1] <=j){
                    //表示這個數字放入多少種方案加上這個不放入有多少種方案
                    dp[i][j] = dp[i-1][j]+dp[i-1][j-array[i-1]];
                }else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        System.out.println(dp[n][sum]);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章