python 我不是学计算机的,对算法不是很熟,打字也很慢,时间不够,第二题当时差点写完,多个十分钟多好。各位大佬看看我写的对嘛。 问题一:化简后是N*N!/a!/b!/c!/d!,不知道为什么只过了80%。 import math inp = input().split() N = int(inp[0]) a = int(inp[1]) b = int(inp[2]) c = int(inp[3]) d = int(inp[4]) value=math.factorial(N**2)/math.factorial(a)/math.factorial(b)/math.factorial(c)/math.factorial(d)%998244353 print(int(value)) 问题二:第二题动态规划,大问题化成小问题,可惜最后没来得及写完。 基本思路是:去掉子节点开始的路线后的森林数=父节点开始的路线构成的森林数目(去掉所有他的子节点构成的树)+兄弟节点个数。所以只需要每个节点算两个值的和就行了,从根节点开始求出所有节点的森林数(根节点由于没有父节点所以是0),2号父节点只有1,而1有两个子节点,所以从2开始的森林数是1。我不是学计算机的,对数据结构不是很了解,不会写树的结构,就偷懒用列表来存储相关参数。大佬们看看有没有错误。 s = input().split() num = int(s[0]) m = [[0, 0] for _ in range(num + 1)] count = [0 for _ in range(num + 1)] while True:     line = input().split()     if len(line) < 1:         break     int_line = [int(j) for j in line]     m[int_line[0]][1] += 1     m[int_line[1]][0] = int_line[0] for i in range(2, num + 1):     count[i] = count[m[i][0]] + m[m[i][0]][1] - 1 print(max(count))