W
e
l
c
o
m
e
: )

P1708 [入门赛 #21] 星云 hard ver. 题解

解法

因为 \(n\leq 7\),所以可以对于每个 \(n\) 进行搜索。

定义 \(dp_{i,j}\) 为长度为 \(i\),各数位之和为 \(j\) 的数的个数。

暴搜处理 dp 数组。

void dfs(int n, int sum, int mx)
{
    if(!n) return dp[mx][sum]++, void();
    for(int i=0;i<=9;i++) 
        dfs(n-1, sum+i, mx);
}

然后对每一位进行前缀和处理。

for(int i=1;i<8;i++)
    {
        dp[i][0]=0;
        for(int j=1;j<1001;j++)
            dp[i][j]+=dp[i][j-1];
    }

最后答案即为 \(dp_{n,k}\)

posted @ 2024-08-25 20:58  Jimmy-LEEE  阅读(28)  评论(0)    收藏  举报