Access denied, Please sign in and make sure you have proper permission.
简单思路就是前半和后半都做个表 (其实可以用同一个表)
表的内容是 { 值 => 和为这个值的排列数 }, 然后复杂度就 √n 了
这个是个动态规划问题,先用动态规划预处理 i 个数字和为 j 的排列方案数 dp[i][j].
递推方程为 dp[i][j] = sum { dp[i-1][j-k]} , (0 <= k <= 9} .
长度为 n 的 lucky number 方案总数
ans = sum { dp[half][s] * dp[n-half][s]} ,其中 half = n/2.
c++ 代码见:http://ideone.com/intocY
之前一直用 C++ 做 acm 题,所以就写 c++ 了。。