划艇 题解
作者:互联网
内网
http://hzoj.com/contest/53/problem/2
组合计数好题,在考试时都没有看出来是组合计数。
对于子任务1/2
区间的总长度不超过1e6,可以将区间内的每个数离散化到一个区间里
于是可以写出一个简单的dp
dp(i,j)表示到第i个学校,最多派出划艇数量为j的方案数
简单的转移
使用数状数组或线段树优化一下就可以做到O(NlogN)
最后将答案-1,删去一个划艇都没有的方案即可
正解
n很小,可以将n个区间的端点离散化,
得到最多2*n个端点。
改变dp的状态定义,
设dp(i,j)表示到第i个学校,最多派出划艇数量在离散化后(j-1,j)区间内的方案数。
不在同一区间内的方案,可以参照子任务1/2,直接进行转移,
对于在同一区间内的方案,则用到了组合数。
将问题抽象化,则为在连续k个空格上,每个空格选择(1,len)之中的一个数放入,或者不选择任何一个数,要求严格递增,求总方案数。
不妨先考虑一个简单的问题:
不能不选择数,求总方案数。
显然答案是C(len,k),因为对于每种组合,和问题的答案是一一对应的。
推广到可以不选数的情况,
我们可以在k个空格外,增加k个0,第i个0表示第i个空格不选数
我们发现,C(len+k,k)恰好与我们所求的问题一一对应,于是我们用构造的方法得到了问题的解
使用前缀和等优化一下转移即可
标签:方案,题解,len,空格,划艇,区间,dp 来源: https://www.cnblogs.com/skyh/p/11191730.html