题目大意:
Smart老师今天特别开心,因为同学们考试考得都特别的好!于是Smart老师买了好多黑色和白色巧克力(可以认为数量无限)来奖励大家,让同学们自己来拿巧克力,但有如下限制:
1、每个人最少拿一块巧克力;
2、每个人只能拿一种颜色的巧克力;
3、拿黑色巧克力的人不少于C 个;
4、第i 个人最多拿a[i]个黑巧克力,或最多拿b[i]个白巧克力。
请问N(编号1~N)个同学拿巧克力可能的方案数是多少?
解题思路:
还是dp~至于转移方程:
if (j
#include <cstdio>
using namespace std;
int n,c,a[100005],b[100005],f[100005][25];
int main()
{
//freopen("fas.in","r",stdin);
//freopen("fas.out","w",stdout);
scanf("%d%d",&n,&c);
f[0][0]=1;
for (int i=1;i<=n;i++)
scanf("%d",&a[i]),a[i]%=10007;
for (int i=1;i<=n;i++)
{
scanf("%d",&b[i]); b[i]%=10007;
f[i][0]+=f[i-1][0]*b[i];//初始化
f[i][0]%=10007;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=c;j++)
{
if (j<c)
f[i][j]=((f[i-1][j-1]*a[i])%10007+(f[i-1][j]*b[i])%10007)%10007;
else
f[i][j]=(f[i-1][j-1]*a[i]%10007+f[i-1][j]*(a[i]+b[i])%10007)%10007;
}
printf("%d",f[n][c]%10007);//答案要模10007
return 0;
}