codeforce#445 div.1 C

博主更新博客的日常
这一题是一道组合数学+dp题,我没有在考场做出,也没有在考后想出来。主要是因为我的思想没有打开,不敢fix the last number which was added.我一直考虑的都是如何添加最后一个字母的问题。
我认为这道题的关键是通过某些n个数所组成的问题都可以看做1 2 3 …n所组成的问题这条规律来得出本题的结果。
这道题我认为题解的做法很好理解。首先设f[i]为放到第i个数且第i个数放在最后不合法(即得不到最大值)的方案数的数量。这个问题分成两种情况,一种是第i-1个数放在i-k的前面,可以贡献的答案是(i-k-1)*(i-2)!,具体意思是这个数可以放的位置有i-k-1个,确定了这两个数以后其他数随便放(i-2)!都可以;第二种情况是第i-1个数放在i-k的后面,(或者是i-k的那个位置)可以贡献的答案是 i1j=ikf[j]×(ij1)!Cj1i2 ,化简的话就是 (i2)!×i1j=ikf[j]/(j1)! ,显然后面求和的部分可以用部分和解决。
最后就是统计答案了。根据上面的那条规律,设最后一个数放在第i个位置,那么第i+1个位置以后的位置怎么放都可以了。所以就是 ni=1f[i]×Pnin1
不会肉搏的Archer都不是好Archer,没错就是指你吉尔伽美什。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值