codeforces - 544C 题解

题目大意:有n个程序员,第i个人一行代码的bug数为ai。公司要写m行代码,问代码中bug量不超过b的方案数对mod取余的结果。

题解:把一个人写一行代码看作一个物品,这样就成了n类物品的完全背包问题,且有两个代价,一个是需要写的代码量m,一个是bug数b

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<climits>
 5 #include<cstring>
 6 using namespace std;
 7 int v[501];
 8 int f[501][501];
 9 int main()
10 {
11     int n,m,b,mod;
12     scanf("%d%d%d%d",&n,&m,&b,&mod);
13     for(int i=1;i<=n;i++)
14     {
15         scanf("%d",&v[i]);
16     }
17     memset(f,0,sizeof(f));
18     f[0][0]=1;
19     for(int i=1;i<=n;i++)
20     {
21         for(int j=1;j<=m;j++)
22         {
23             for(int k=v[i];k<=b;k++)
24             {
25                 f[j][k]+=f[j-1][k-v[i]];
26                 f[j][k]%=mod;
27             }
28         }
29     }
30     int res=0;
31     for(int i=0;i<=b;i++)
32     {
33         res+=f[m][i];
34         res%=mod;
35     }
36     printf("%d\n",res);
37     return 0;
38 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值