UVa11137 Ingenuous Cubrency

  原题传送:http://uva.onlinejudge.org/external/111/11137.html

  递推,动态规划。

  d[i][j]表示使用不超过i的 i 的整数的立方,累加和为 j 的方案数。

  则有状态转移方程:

    d[i][j] = d[i - 1][j] + d[i][j - i3]。

  初始条件d[0][0] = 1;

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 typedef  long long LL;
 4 
 5 const int maxi = 21;
 6 const int maxn = 10000;
 7 
 8 LL d[maxi + 2][maxn + 5];
 9 
10 void init()
11 {
12     memset(d, 0, sizeof d);
13     d[0][0] = 1;
14     for(int i = 1; i <= maxi; i ++)
15     {
16         for(int j = 0; j <= maxn; j ++)
17         {
18             if(j - i * i * i >= 0)
19                 d[i][j] = d[i - 1][j] + d[i][j - i * i * i];
20             else
21                 d[i][j] = d[i - 1][j];
22         }
23     }
24 }
25 
26 int main()
27 {
28     init();
29     int n;
30     while(scanf("%d", &n) == 1)
31     {
32         printf("%lld\n", d[maxi][n]);
33     }
34     return 0;
35 }
posted @ 2012-11-19 23:47  芒果布丁  阅读(186)  评论(0编辑  收藏  举报