【编程题】应该怎么吃呢(Java实现)(大疆B卷第三题)
题目来源
大疆笔试B卷第三题(2019.8.6)
题目描述
小W非常喜欢吃零食,经常都会去零食间里购买半价的零食吃,但是他为了控制自己的体重,因此会限制自己买零食的开销在某个数值以内。但是小W有一个特别的爱好,他对于某些零食特别的喜欢,并且会对这些零食的喜爱成都进行排序。对于零食A和零食B,如果小W对零食A的喜爱程度大于对零食B的喜爱程度,那么每次拿零食的时候,一定会确保A的数目比B多。现在零食间里有N种零食,假设每种零食都是取不完的,但小W每次都会刚好花完所有的开销,那么小W去取零食的时候应该有多少种可能的取法呢?
输入描述
输入包含多组测试数据,每组数组:
第一行:买零食的开销 V (V < 1000) 和 所有的零食种类数目 N (N < 200)。
第二行:第 i 个正整数表示第 i 种零食的价格 c_i (c_i < 1000)。
第三行:特别喜欢的零食的种类数 M (2 <= M <= N)
第四行:按照对 M 种零食的喜爱程度从高到低排序,第 i 种零食的喜爱程度会大于第 i + 1 种,保证不会形成环
输出描述
对于每组测试数据:
输出一个整数ans,表示在满足小W的特殊偏好的情况下,并且花光所有开销,有多少可能方案。
(由于ans_i可能很大,因此最终结果 ans_i % 10000007)
输入样例
5 2
1 2
2
2 1
样例输出
1