A. Writing Code(dp二维完全背包)

有n个人,要写m行代码,第i个人每写一行会出现ai个bug,每个人可以写任意行,但总bug数不能超过b个,求总方案数

dp[j][k] 表示有j行代码k个bug的方法数,
所有转移方程为:类似一维完全背包
dp[j + 1][k + a[i]] += dp[j][k]

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int dp[maxn][maxn];
int a[maxn];
int main() {
    int n, m, b, mod;
    cin >> n >> m >> b >> mod;
    for (int i = 1; i <= n; i++) cin >> a[i];
    dp[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            for (int k = 0; k <= b; k++) {
                dp[j + 1][k + a[i]] += dp[j][k];
                dp[j + 1][k + a[i]] %= mod;
            }
        }
    }
    int ans = 0;
    for (int i = 0; i <= b; i++) {
        ans += dp[m][i];
        ans %= mod;
    }
    cout << ans << endl;
    return 0;
} 
全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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