P16281 「MierOI R1」Beyond

题目描述

某一天,小 M 学习了一个叫做「分数规划」的算法,它是用来解决「分数规划问题」的。 :::info[分数规划问题]{open} 有 $n$ 个物品,第 $i$ 个物品的价值为 $a_i$,重量为 $b_i$。$a_i,b_i$ 均为正整数。 从 $n$ 个物品中选出 $k$ 个,记所选物品为 $i_1,i_2,\dots,i_k$,最大化 $$\frac{a_{i_1}+a_{i_2}+\dots+a_{i_k}}{b_{i_1}+b_{i_2}+\dots+b_{i_k}}$$ 的值。 ::: 恰巧,小 M 还做过一道叫做 [sale](https://www.luogu.com.cn/problem/P14636) 的题。他突发奇想,便出了一道题来考考你。 给定 $n,k$,以及物品的价值序列 $a$,求有多少种物品的重量序列 $b$,**满足 $\bm{1 \le b_i \le 2}$**,使以下贪心策略恰好求得「分数规划问题」的最优解: - 将物品 **按价值 $\bm{a_i}$ 降序排序**。对于价值相同的物品,**按序号 $\bm{i}$ 升序排序**。选取排序后的前 $k$ 个物品。 答案对 $998,244,353$ 取模。

输入格式

**本题有多组测试数据。** 输入的第一行包含一个正整数 $T$,表示测试数据的组数。 接下来依次输入 $T$ 组测试数据。对于每组测试数据: - 第一行,两个正整数 $n,k$。 - 第二行,$n$ 个正整数 $a_1,a_2,\dots,a_n$。

输出格式

对于每组测试数据,输出一行一个整数,表示满足条件的物品的重量序列 $b$ 的个数。答案对 $998,244,353$ 取模。

说明/提示

#### 「样例 #1 解释」 对于第一组测试数据,满足条件的物品的重量序列 $b$ 有 $(1,1),(1,2),(2,2)$。当 $b=(2,1)$ 时,贪心解为 $\frac{a_1}{b_1}=\frac{10}{2}=5$,最优解为 $\frac{a_2}{b_2}=\frac{9}{1}=9$,贪心策略未求得最优解。 #### 「数据范围」 **本题采用子任务捆绑测试。** 对于所有测试数据,保证 $1 \le T \le 5$,$1 \le k \le n \le 2\,000$,$1 \le a_i \le 10^9$。 ::cute-table{tuack} | 子任务 | $n \le$ | $k$ | 分值 | |:-:|:-:|:-:|:-:| | $1$ | $5$ | $\le n$ | $10$ | | $2$ | $16$ | ^ | $10$ | | $3$ | $40$ | ^ | $15$ | | $4$ | $200$ | ^ | $15$ | | $5$ | $2\,000$ | $=1$ | $5$ | | $6$ | ^ | $=2$ | $10$ | | $7$ | ^ | $=n-1$ | $5$ | | $8$ | ^ | $=n-2$ | $10$ | | $9$ | ^ | $\le n$ | $20$ |