CF295C Greg and Friends

题目描述

一天,Greg 和他的朋友们在森林里散步。包括 Greg 在内,一共有 $n$ 个人同行。不久,他们遇到了一条河。大家决定要过河。幸运的是,河岸边正好有一只船。已知这条船最多只能承载总重量不超过 $k$ 千克的人。 Greg 立即把大家的体重记了下来。结果发现每个人的体重要么是 $50$ 千克,要么是 $100$ 千克。现在 Greg 想知道,要将所有人都运送到对岸,这条船至少需要渡河多少次。 每次划船至少需要一个人在船上才能操控船,船每次渡河时,只要总重量不超过 $k$,船上可以有任意数量的人。 Greg 还想知道,在最少渡河次数的方案中,有多少种不同的运送方式。如果某次渡河选择的人集合不同,那么视为不同的方式。 请你帮助 Greg 解决这个问题。

输入格式

第一行包含两个整数 $n$ 和 $k$,表示包括 Greg 在内的人数,以及船的最大承重。$1\leq n\leq 50,\,1\leq k\leq 5000$。 第二行包含 $n$ 个整数,表示每个人的体重。每个人的体重为 $50$ 或 $100$ 千克。 你可以认为 Greg 和他的朋友们已经被编号。

输出格式

第一行输出一个整数,表示最少需要渡河的次数。如果无法将所有人都运送到对岸,输出 $-1$。 第二行输出采取最少渡河次数的方案数对 $1000000007$ ($10^9+7$) 取余的结果。如果无法将所有人都运送到对岸,输出 $0$。

说明/提示

在第一个样例中,Greg 独自一人,因此只需一次渡河。 在第二个样例中,应按下面的计划操作: 1. 运送两个 $50$ 千克的人。 2. 送回一个 $50$ 千克的人。 3. 运送一名 $100$ 千克的人。 4. 送回一名 $50$ 千克的人。 5. 运送两个 $50$ 千克的人。 一共需要 $5$ 次渡河。在步骤 $2$ 的选择不同的人,会有两种不同的方式。 由 ChatGPT 5 翻译