链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=269
求1~10^9间各位相加和为s的数的个数..
dp[i][j]:::前i位和为j的数字的个数
#include <iostream> using namespace std; int dp[11][90]; void vffun(void) { int i,j,k; for(i=1;i<10;i++) dp[1][i]=1; for(i=1;i<10;i++) for(j=1;j<=9*i;j++) for(k=0;k<10&&k<=j;k++) dp[i][j]=dp[i][j]+dp[i-1][j-k]; } int main() { int s; int ans; vffun(); while(cin>>s) { ans=0; if(s==1) cout<<10<<endl; else { for(int i=1;i<10;i++) ans+=dp[i][s]; cout<<ans<<endl; } } return 0; }