codeforce problem 544 C
题意:有n个程序员,他们每行会有ai个BUG,问写m行代码产生不超过b个bug的方案
思路:dp[i][j]代表i行产生j个BUG 方案,dp[i][j]+=dp[i-1][j-第x个程序员产生的bug数]
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=502; 4 5 int dp[N][N]; 6 7 int main(){ 8 int n,m,b,mod; 9 cin>>n>>m>>b>>mod; 10 memset(dp,0,sizeof(dp)); 11 dp[0][0]=1; 12 int x; 13 for(int i=1;i<=n;i++){ 14 scanf("%d",&x); 15 for(int j=1;j<=m;j++){ 16 for(int k=x;k<=b;k++){ 17 dp[j][k]=(dp[j][k]+dp[j-1][k-x])%mod; 18 } 19 } 20 } 21 int sum=0; 22 for(int i=0;i<=b;i++){ 23 sum=(sum+dp[m][i])%mod; 24 // cout<<i<<" "<<dp[n][i]<<endl; 25 } 26 27 cout<<sum<<endl; 28 }