2017-數字和爲sum的方法數
給定一個有n個正整數的數組A和一個整數sum,求選擇數組A中部分數字和爲sum的方案數。
當兩種選取方案有一個數字的下標不一樣,我們就認爲是不同的組成方案。
輸入描述:
輸入爲兩行:
第一行爲兩個正整數n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)
第二行爲n個正整數Ai,以空格隔開。
輸出描述:
輸出所求的方案數
示例1
輸入
5 15 5 5 10 2 3
輸出
4
#include <iostream>
#include <algorithm>
using namespace std;
long long dp[1001][1001];
int main()
{
int n,sum;
cin>>n>>sum;
int p[1000];
for(int i = 1 ; i <= n ; i++)
cin>>p[i];
for (int i = 0 ; i < n ;i++)
{
dp[i][0] = 1;
}
for (int j = 1 ; j < sum ;j++)
{
dp[0][j] = 0;
}
for (int i = 1 ; i <= n ;i++)
{
for (int j = 0 ; j<=sum ;j++)
{
if(p[i]<=j) dp[i][j] = dp[i-1][j]+dp[i-1][j-p[i]];
else dp[i][j] = dp[i-1][j];
}
}
cout<<dp[n][sum]<<endl;
return 0;
}