2017-數字和爲sum的方法數

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章