HDU 2082 母函数法

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 
 6 int cnt[30] , dp[30][100];
 7 
 8 int main()
 9 {
10   //  freopen("a.in" , "r" , stdin);
11     int T;
12     scanf("%d" , &T);
13     while(T--){
14         for(int i=1 ; i<=26 ; i++)
15             scanf("%d" , cnt+i);
16 
17         memset(dp , 0 , sizeof(dp));
18         dp[0][0] = 1;
19         for(int i=1 ; i<=26 ; i++){
20             for(int j=0 ; j<=cnt[i] ; j++){
21                 if(i*j > 50) break;
22                 for(int k=50-i*j ; k>=0  ; k--){
23                     dp[i][i*j+k] += dp[i-1][k];
24                 }
25             }
26         }
27         int ans = 0;
28         for(int i =1 ; i<=50 ; i++)
29             ans += dp[26][i];
30         printf("%d
" , ans);
31     }
32     return 0;
33 }
原文地址:https://www.cnblogs.com/CSU3901130321/p/4240741.html