我一直在尝试解决面试街的以下问题。计分卡(30 分)
在一场锦标赛中,N 名玩家互相对战一次。每场比赛都会导致任一玩家获胜。没有关系。您已经给出了一张记分卡,其中包含每个玩家在比赛结束时的得分。玩家的得分是玩家在锦标赛中赢得的总局数。然而,一些球员的分数可能已经从记分卡中删除了。有多少可能的记分卡与输入记分卡一致?
输入:第一行包含案例 T 的数量。接下来是 T 案例。每个案例在第一行包含数字 N,然后在第二行包含 N 个数字。第 i 个数字表示 s_i,即第 i 个玩家的得分。如果第 i 个玩家的分数已被擦除,则以 -1 表示。
输出:输出 T 行,包含每个案例的答案。输出每个结果模 1000000007。
Constraints:
1 <= T <= 20
1 <= N <= 40
-1 <= s_i < N
Sample Input:
5
3
-1 -1 2
3
-1 -1 -1
4
0 1 2 3
2
1 1
4
-1 -1 -1 2
Sample Output:
2
7
1
0
12
解释:对于第一种情况,可能有 2 个记分卡:0,1,2 或 1,0,2。对于第二种情况,有效记分卡为 1,1,1, 0,1,2, 0,2,1, 1,0,2, 1,2,0, 2,0,1, 2,1,0 . 对于第三种情况,唯一有效的记分卡是 {0,1,2,3}。对于第四种情况,没有有效的记分卡。两个玩家都得 1 分是不可能的。
我试图提出通用函数方法,但我真的试图使用动态编程来解决这个问题。你怎么能想到这个问题的递归关系?