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}\)。

浙公网安备 33010602011771号