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\n" , ans);

31     }

32     return 0;

33 }

 

你可能感兴趣的:(HDU)