1
10
我的代码:
#include <iostream> #include <cstring> using namespace std; int main() { int n,i,j,k; int dp[10][82]; memset(dp,0,sizeof(dp)); for (i=1;i<=9;++i) { dp[1][i]=1; } for (i=1;i<=9;++i)//总的位数 { for (j=1;j<=i*9;++j)//在i位下的j值 { for (k=0;k<=9&&k<=j;++k)//没次的前一位都由后一位决定 { dp[i][j]+=dp[i-1][j-k];//因为j>k,所以j可取j-k的数来组成j } } } while (cin >> n) { int sum; if (n==1) { cout << 10 << endl; continue; } for (i=1,sum=0;i<=9;++i) { sum+=dp[i][n] ; } cout << sum << endl; } return 0; }
原文地址:http://blog.csdn.net/zsc2014030403015/article/details/45150739