题解 | #数字和为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")

全部评论

相关推荐

榕城小榕树:1200单休,我去干点啥别的不好
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
07-07 10:44
青岛工学院 Java
机械打工仔:对方没做错任何事,你自己在这自找没趣呢,就算他工资不高,人家定多少薪资是人家的事,况且人家写了1~3年清清楚楚
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务