(534A)codeforce

#include <bits/stdc++.h>

#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0x7fffffff
//#define mod 1000000007

using namespace std;
/*

题意:

想法:完全背包

dp[i][j][k] += dp[i-1][j-1][k - a[i]];
用 dp[i][j][k] 来表示用前 i 个人写前 j 行code,总共产生了 k 个 bug(s)

*/
int dp[1009][1009];
int a[1009];

int main()
{
   // freopen("date.in","r",stdin);
    int n,m,b;
    ll mod;
    memset(dp,0,sizeof(dp));
    scanf("%d%d%d%lld",&n,&m,&b,&mod);
    for(int i = 1;i<=n;i++) scanf("%d",&a[i]);
    dp[0][0] = 1;//第j行产生k个的方法数
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            for(int k = b;k>=a[i];k--)
            {
                dp[j][k] = (dp[j][k] + dp[j - 1][k - a[i]])%mod;
            }
        }
    }
    ll ans = 0;
    for(int i = 0;i<=b;i++)
    {
        ans = (ans + dp[m][i])%mod;
    }
    printf("%lld\n",ans);
    return 0;
}

你可能感兴趣的:((534A)codeforce)