DTOJ 2577. 建筑师(building)

题意

Z是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建n个建筑,每个建筑的高度是1n之间的一个整数。小Z有很严重的强迫症,他不喜欢有两个建筑的高度相同。另外小Z觉得如果从最左边(所有建筑都在右边)看能看到A个建筑,从最右边(所有建筑都在左边)看能看到B个建筑,这样的建筑群有着独特的美感。现在,小Z想知道满足上述所有条件的建筑方案有多少种?

如果建筑i的左()边没有任何建造比它高,则建筑i可以从左()边看到。两种方案不同,当且仅当存在某个建筑在两种方案下的高度不同。

【数据范围】
10% 1 <= n <= 10
20% 1 <= n <= 100
40% 1 <= n <= 500001 <= T <= 5
100% 1 <= n <= 500001 <= A, B <= 1001 <= 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[n1][a+b2],然后再考虑将哪些移到最高楼的一边即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值