【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 }