鏈接: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]);
}
}