Milliard Vasya's Function URAL 1353(DP)

Milliard Vasya’s Function URAL 1353(DP)

题目链接:https://cn.vjudge.net/contest/190727#problem/F
题目大意:求1-1e9之间的数中,各数位和为s的数的个数。
input:1 output:10
题目分析:dp[i][j] i表示第i位,j表示和为j;
对于当前这位,就可以放0,个数为dp[i - 1][j] ;可以放1,个数为dp[i - 1][j - 1]; 可以放2,个数为dp[i - 1][j - 2]; …..最大可以放的是min(9, j);直接跑dp即可。

#include <bits/stdc++.h>
using namespace std;

const int maxn = 500;
const int inf = 0x3f3f3f3f;
int dp[maxn][maxn], n;


int main()
{
    int s;
    cin >> s;
    for(int i = 1; i <= 9; i++ ) dp[i][0] = 1;
    for(int i = 1; i <= 9; i++) {
        for(int j = 1; j <= 81; j++) {
            for(int k = 0; k <= min(j, 9); k++) {
                dp[i][j] += dp[i - 1][j - k] ;
            }
        }
    }

    dp[9][1] += 1;
    printf("%d\n", dp[9][s]);
}

猜你喜欢

转载自blog.csdn.net/deerly_/article/details/80283878
今日推荐