CodeForces

来源:互联网 发布:asp 网页访问数据库 编辑:程序博客网 时间:2024/05/23 22:01

思路:

dp[i][j][k] = n;
表示第i个人,写了j行代码,有k个bug的有方案数n。
dp[i][j][k] = dp[i-1][j][k](这个人没写代码) + dp[i-1][j-1][k-a[i] ](这个人写代码和bug了);
注意初始条件。
注意可能炸lli

#include <iostream>#include <cstdio>#include <string.h>typedef long long int lli;using namespace std;lli dp[502][502];int a[502];int main(){    int n,m,b,mod;    scanf("%d%d%d%d",&n,&m,&b,&mod);    for(int i = 1; i<= n;i++){        scanf("%d",a+i);    }    dp[0][0] = 1;    for(int i = 1;i <= n;i++){        for(int j = 1;j <= m;j++){            for(int k = a[i];k <= b;k++){                dp[j][k] =(dp[j][k] +  dp[j-1][k-a[i]]%mod) % mod;            }        }    }    lli ans = 0;    for(int i = 0;i <= b;i++){        ans = (ans + dp[m][i]) % mod;    }    printf("%lld\n",ans);}
1 0