HDU 7239:Matryoshka Doll ← 动态规划

​【题目来源】
https://acm.hdu.edu.cn/showproblem.php?pid=7239

【题目描述】
zyb 在访问莫斯科期间购买了 n 个 matryoshka 玩偶,大小分别为 a1、a2、…、an,从最小到最大排序。
大小为 i 的 matryoshka 可以放入另一个大小为 j 的 matryoshka,当且仅当 j−i≥r、 其中r是某个给定的整数参数。
zyb 希望将所有 n 个 matryoshka 玩偶分成 k 组,这样每个组中都可以形成一个嵌套的 Matryoshka 玩偶,其中一组 Matryoska 玩偶的索引为 c1、c2、…、cm(1≤c1<c2<…<cm≤n) 可以形成嵌套的 matryoshka 玩偶如果 ∀1≤i<m,a[ci]+r≤a[ci+1]。
zyb 想知道有多少种方法可以将 n 个玩偶分成 k 组,以满足上述要求。请注意,诸如 {{1,2}, {3,4}} 和 {{3,4}, {1,2}} 等划分被视为相同的方式。由于答案可能太大,您只需要输出答案模 998244353。 

【输入格式】
第一行包含整数T(1≤T≤20) ,表示测试用例的数量。
对于每个测试用例,第一行包含三个整数 n,k,r(1≤k≤n≤5000,1≤r≤1e9),表示 matryoshka 玩偶的数量,zyb 想要划分的组的数量,以及参数。
下一行包含 n 个整数 a1、a2、…、an(1≤a1≤a2≤...≤an≤1e9)表示 matryoshka 玩偶的尺寸。
可以保证 ∑n≤所有测试用例中有 50000 个。

【输出格式】
对于每个测试用例,在一行中输出一个整数,表示取模 998244353 的答案。​​​​​​​

【输入样例】
2
4 3 2
1 2 3 4
4 2 1
1 1 2 2

【输出样例】
3
2

【数据范围】
1≤T≤20
1≤k≤n≤5000,1≤r≤1e9
1≤a1≤a2≤...≤an≤1e9

【算法分析】
有 n 个套娃,大小为 a1 ≤a2 ≤... ≤an,现在要将这些套娃分成 k 组,每组套娃按照大小排序后相邻两个套娃之间的大小差距要求>=r,求方案数。
设 f[i][j] 表示将前 i 个套娃分成 j 组的方案数,状态转移方程为 f[i][j]=f[i-1][j-1](新增一组) + f[i-1][j]*max(0, j-num(z)) (第 x 的套娃跟之前的放在一组),其中 num(z) 表示 1<=z<i 且ai-r<az<=ai 的 z 的个数。时间复杂度为O(n^2)。

【算法代码】
HDU(https://acm.hdu.edu.cn/) 不支持万能头文件。

#include <iostream>
#include <algorithm>
using namespace std;

typedef long long LL;
const int M=5005;
const LL mod=998244353;
int n,k,r,a[M];
LL f[M][M];

int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        scanf("%d%d%d",&n,&k,&r);
        for(int i=1; i<=n; i++) scanf("%d",&a[i]);
        for(int i=0; i<=n; i++) {
            for(int j=0; j<=k; j++) f[i][j]=0;
        }
        f[0][0]=1;
        for(int i=1,z=1; i<=n; i++) {
            while(z<i && a[i]-r>=a[z]) z++;
            int num=i-z;
            for(int j=num+1; j<=min(i,k); j++) {
                f[i][j]=(f[i-1][j-1]+f[i-1][j]*(j-num))%mod;
            }
        }
        printf("%lld\n",f[n][k]);
    }
    return 0;
}

/*
in:
2
4 3 2
1 2 3 4
4 2 1
1 1 2 2

out:
3
2
*/



【参考文献】
https://acm.hdu.edu.cn/showproblem.php?pid=7239
https://mp.weixin.qq.com/s/HNISXyopgpO1PmATouxuyg


 

​

posted @ 2026-08-24 14:02  Triwa  阅读(7)  评论(0)    收藏  举报