题解 | #数字和为sum的方法数#

数字和为sum的方法数

https://www.nowcoder.com/practice/7f24eb7266ce4b0792ce8721d6259800

#include <iostream>
using namespace std;
const int MAXN = 1e3+5;
#define ll long long
int a[MAXN],n,sum;
ll dp[MAXN][MAXN];
//dp[i][j]: 前i个数组成j的方案数
int main() {
    cin>>n>>sum;
    for(int i=0;i<n;i++) cin>>a[i];
    dp[0][a[0]] = 1;
    for(int i=1;i<n;i++){
        for(int j=0;j<=sum;j++){
            //
            dp[i][j] = dp[i-1][j];
            if(j>=a[i]) dp[i][j] += dp[i-1][j-a[i]];//选择第i个数
            if(j==a[i]) dp[i][j] += 1;//第i个数可单独组成j
        }
    }
    cout<<dp[n-1][sum]<<endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务