http://acm.timus.ru/problem.aspx?space=1&num=1353
输入一个数 s,求 1~109
中各位数之和等于s的数的个数。
思路:dp[i][j]表示前i位表示的数之和是j的个数。那么dp[i][j] = dp[i-1][ j-c ] (0 <= c <= 9)。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int main() { int dp[11][100],n; memset(dp,0,sizeof(dp)); for(int i = 1; i <= 9; i++) dp[1][i] = 1; //注意初始化 for(int i = 2; i <= 9; i++) { for(int j = 1; j <= 81; j++) { for(int k = 0; k <= 9; k++) dp[i][j] += dp[i-1][j-k]; } } int ans; while(~scanf("%d",&n)) { if(n == 1) printf("10\n"); else { ans = 0; for(int i = 1; i <= 9; i++) ans += dp[i][n]; printf("%d\n",ans); } } return 0; }
URAL 1353. Milliard Vasya's Function(dp),布布扣,bubuko.com
URAL 1353. Milliard Vasya's Function(dp)
原文:http://blog.csdn.net/u013081425/article/details/21275345