#P14598. [Bulgarian2025秋季赛]plans
[Bulgarian2025秋季赛]plans
题目描述
Deni 想在第二天完成 项活动,活动编号为 到 。她准备先安排一个执行顺序,因此会制定一个“计划”。
一个计划由若干个偏好关系组成,每个偏好关系是一个有序对 (满足 且 ),表示她更希望活动 在活动 之前进行。
更形式化地说:
- 一个计划包含若干个有序对,也可以一个都没有;
- 不允许出现重复的有序对;
- 不允许出现 这样的有序对。
注意,对于一个给定计划,如果存在一条由偏好关系连接出的路径从 到 ,那么 Deni 也会认为“ 应当在 之前完成”。
例如,如果计划中有偏好关系:
那么 Deni 会偏好:
- 在 之前;
但对于 和 谁应当更早完成,则她并没有偏好。
由于某些计划中可能存在冲突,因此不一定所有活动都能按照偏好顺序同时完成。Deni 会尽可能多地选出一些活动,并为这些活动安排一个顺序,使得这个顺序不违反计划诱导出的偏好关系。
也就是说,如果对某个计划,最多能选出 个活动,则存在一个序列:
使得不存在 且 Deni 偏好 在 之前完成。
现在 Deni 想知道:有多少种不同的计划,使得她最多恰好能完成 项活动?
请你编写程序 plans,求这样的计划数量,并对 取模。
实现细节
你需要实现如下函数:
int count_plans(int N, int K)
N:活动数量;K:在满足计划偏好的前提下,最多能安排完成的活动数。
该函数对每个测试点只会被调用一次,你需要返回答案对 取模后的结果。
输入格式(本地评测器)
- 第一行两个整数 ,表示活动数量,以及最多可完成的活动数。
输出格式(本地评测器)
- 输出一行一个整数,表示函数返回值。
样例 #1
输入
2 2
输出
3
说明
若把偏好关系看成有向边,则恰好有三种计划使得最多可以完成 项活动:
- 没有任何偏好关系;
- 只有 ;
- 只有 。
样例 #2
输入
3 1
输出
18
样例 #3
输入
4 3
输出
774
数据范围
- ;
- 。
子任务
| 子任务 | 分值 | 需要通过的子任务 | 其他限制 | ||
|---|---|---|---|---|---|
| 0 | - | 样例 | |||
| 1 | 9 | 0 | - | ||
| 2 | 12 | - | |||
| 3 | 18 | 2 | |||
| 4 | 20 | 0-3 | |||
| 5 | 14 | 0-4 | |||
| 6 | 10 | 0-5 | |||
| 7 | 17 | 0-6 | |||
只有当某个子任务以及其依赖的所有子任务全部通过时,才能获得该子任务的分数。