您的位置:首页 > 其它

codeforces #320 Writing Code (完全背包)

2015-11-12 15:55 337 查看
题目:http://codeforces.com/contest/544/problem/C

题意:有n个程序员,给出每个程序员写一行代码会出现的bug数,现在要写m行的代码,问怎么安排使得总的bug数小于m。

分析:定义dp[i][j][k]为处理可前i个程序员,写了j行代码,出现k个错误的方案数。直接用完全背包推即可。

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
const LL INF = 1E9+9;
int n,m,mod;
void add(int &a,int x)
{
a+=x;
while(a>=mod)
a-=mod;
}
const int maxn = 600;
int dp[maxn][maxn],f[maxn];
int main()
{
int e,i,j,k;
scanf("%d%d%d%d",&n,&m,&e,&mod);
for(i=1;i<=n;i++)
scanf("%d",&f[i]);
dp[0][0]=1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(k=0;k<=e;k++) if(k-f[i]>=0)
add(dp[j][k],dp[j-1][k-f[i]]);
int ans=0;
for(k=0;k<=e;k++)
add(ans,dp[m][k]);
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dp 完全背包