弹珠 题解

题意

n 个一样的球放到 k 个盘子里的方案数(每个盘子至少一个)。

题解

考虑记 f(i,j) 为结果。

  1. 我们可以一次性只加一个球(新放到一个盘子里),也就是可以从 f(i1,j1) 转移过来。
  2. 也可以用已有的盘子每个盘子放一个球,就是从 f(ij,j) 转移过来。

为什么不可以从 f(ik,j)f(ik,jk)1k<j 转移过来呢?

因为重复两次上述操作会导致重复(再说了时间复杂度也不允许……)

时间复杂度 O(nk)

namespace zqh {
const int N = 5005;

int n, k;
int dp[N][N];

void init() {
    cin >> n >> k;
}

void solve() {
    dp[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <=  min(i, k); j++) {
            dp[i][j] = (dp[i - 1][j - 1] + dp[i - j][j]) % mod;
        }
    }
    cout << dp[n][k];
}

void main() {
    init();
    solve();
}
}  // namespace zqh
posted @   Archippus  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡
点击右上角即可分享
微信分享提示