Codeforces544C Writing Code

题意:输入n,m,b,mod,接下来a1-a[n],n个队员,每个队员写一行就有a[i]个BUG,最后要有m行,而且bug不能超过b个的方法数

题解:n个物品放入背包,每一个可以不限制,就是完全背包,有两个花费,一个是费用的限制,一个是个数的限制,所以是二维的完全背包

#include <bits/stdc++.h>
#define maxn 1001
#define ll long long
using namespace std;
ll dp[maxn][maxn], n, m, b, mod, v1, v2, a;
void comppack(int c1,int c2){
    for(int i=c1;i<=b;i++)
        for(int j=c2;j<=m;j++)
        dp[i][j] = (dp[i][j]+dp[i-c1][j-c2])%mod;
}
int main(){
    cin>>n>>m>>b>>mod;
    dp[0][0] = 1;
    for(int i=0;i<n;i++){
        cin>>a;
        comppack(a, 1);
    }
    for(int i=0;i<b;i++) dp[b][m] = (dp[b][m]+dp[i][m])%mod;
    cout<<dp[b][m]<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/Noevon/p/8430393.html