题意
小Z是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建n个建筑,每个建筑的高度是1到n之间的一个整数。小Z有很严重的强迫症,他不喜欢有两个建筑的高度相同。另外小Z觉得如果从最左边(所有建筑都在右边)看能看到A个建筑,从最右边(所有建筑都在左边)看能看到B个建筑,这样的建筑群有着独特的美感。现在,小Z想知道满足上述所有条件的建筑方案有多少种?
如果建筑i的左(右)边没有任何建造比它高,则建筑i可以从左(右)边看到。两种方案不同,当且仅当存在某个建筑在两种方案下的高度不同。
【数据范围】
10% : 1 <= n <= 10
20% : 1 <= n <= 100
40% : 1 <= n <= 50000,1 <= T <= 5
100% :1 <= n <= 50000,1 <= A, B <= 100,1 <= T <= 200000。
题解
DP可设 f [ i ] [ j ] f[i][j] f[i][j]为前 i i i个数可看到 j j j个的方案数,容易 O ( n A ) O(nA) O(nA)求得。算答案时,对于每个询问还需 O ( n ) O(n) O(n)枚举最高的楼所在的位置。考虑将左右两边合在一起,直接查找 f [ n − 1 ] [ a + b − 2 ] f[n-1][a+b-2] f[n−1][a+b−2],然后再考虑将哪些移到最高楼的一边即可。