milliard Vasya 函数

 

Description

Vasya是一个刚入门的数学家。
他决定对科学做出一个重要的贡献,以便世界知名。
但怎么才能做到呢?像勾股定理那样有趣的事实都已经被证明过了。
对!他要做出一些他自己的东西,原创性的。
因此他想出了一个Vasya函数定理。

Vasya函数(VF)相当简单:第N个VF函数在点S的值,就是从1到N之间的整数当中,各位数字之和等于S的数的个数。
Vasya给你一个任务,找到milliard VF值,即 N = 1000000000 时的VF值。

Input

整数S (1 ≤ S ≤ 81)

Output

milliard VF 在 S 点的值。

Sample Input

1

Sample Output

10

#include <iostream>
using namespace std;
int f[10][82];
//f[i][j] = E(f[i-1][j-k]) (0 <= k <= j)
int main()
{
    int s;
    cin >> s;
    if(s == 1)
    {
        cout << 10 << endl;
        return 0;
    }
    f[0][0] = 1;
    for(int i = 1; i <=9; i++)
        f[1][i] = 1;
    for(int i = 2; i <= 9; i++)
    {
        for(int j = 1; j <= 81; j++)
        {
            int sum = 0;
            for(int k = 0; k < j; k++)
                if( k <= 9 && (i-1)*9 >= j-k)
                    sum += f[i-1][j-k];
            f[i][j] = sum;
        }
    }
    int ans = 0;
    for(int i = 1; i <= 9; i++)
        ans += f[i][s];
    cout << ans << endl;
    return 0;
}

你可能感兴趣的:(milliard Vasya 函数)