【HDOJ】2082 找单词

背包问题,非常相似的。不过递归后TLE了,打个二维表。

 1 #include <stdio.h>
 2 
 3 int nums[27];
 4 int cnt[27][51];
 5 
 6 int main() {
 7     int case_n;
 8     int i, j, k, tmp;
 9 
10     scanf("%d", &case_n);
11 
12     while (case_n--) {
13         for (i=1; i<=26; ++i)
14             scanf("%d", &nums[i]);
15         for (i=0; i<=26; ++i)
16             cnt[i][0] = 1;
17 
18         for (i=1; i<=26; ++i) {
19             for (j=1; j<51; ++j) {
20                 cnt[i][j] = cnt[i-1][j];
21                 for (k=1; k<=nums[i]; ++k) {
22                     tmp = j - i*k;
23                     if (tmp >= 0)
24                         cnt[i][j] += cnt[i-1][tmp];
25                 }
26             }
27         }
28 
29         tmp = 0;
30         for (i=1; i<=50; ++i)
31             tmp += cnt[26][i];
32         printf("%d\n", tmp);
33     }
34 
35     return 0;
36 }

 

posted on 2014-04-13 01:31  Bombe  阅读(178)  评论(0编辑  收藏  举报

导航