1、Hdu 2082 找单词

  题意:单词A-Z具有1-26的价值,现有字母A-Z的个数num[i],求问在不超过价值为五十的情况下,有多少种字母的组合数.

  思路:用指数代表价值,价值又为数组的下标;用系数代表组成该价值的方案数,方案数为数组中存的值。

 1 #include<iostream>
 2 #include<memory.h>
 3 using namespace std;
 4 int re[55];
 5 int p1[55];
 6 int p2[55];
 7 int xx[27];
 8 int main()
 9 {
10     int t;
11     scanf("%d", &t);
12     while (t--)
13     {
14         for (int i = 1; i <= 26; i++) scanf("%d", &xx[i]);
15         for (int i = 0; i <= 50; i++)
16         {
17             if (i <= xx[1]) p1[i]= 1;
18             else p1[i] =0;
19             re[i]=p2[i] = 0;
20         }
21         
22         for (int i = 2; i <= 26; i++)
23         {
24             for (int k = 0; k <= xx[i] && k*i <= 50; k++) p2[k*i] = 1;
25             for (int j = 0; j <=50; j++)
26             {
27                 for (int k = 0; k <= xx[i]; k++)
28                 {//第i个字符的多项式,每项的指数为i*k,系数为1
29                     int zhishu = i*k+j;
30                     if (zhishu > 50) continue;
31                     re[zhishu] += p1[j]*p2[k*i];
32                 }
33             }
34             for (int j = 0; j <= 50; j++) p1[j]=re[j],re[j]=p2[j]=0;
35         }
36         int sum = 0;
37         for (int i = 1; i <= 50; i++) sum += p1[i];
38         printf("%d\n", sum);
39     }
40     return 0;
41 }
View Code

相关文章:

  • 2022-12-23
  • 2021-12-12
  • 2021-09-09
猜你喜欢
  • 2021-12-17
  • 2021-06-24
  • 2022-02-16
  • 2021-10-08
  • 2022-12-23
  • 2022-01-22
相关资源
相似解决方案