DP(Nietzsche)的hu测 T2(dp)

61 篇文章 0 订阅
44 篇文章 0 订阅

版权属于DP,想要引用此题(包括题面)的朋友请联系博主

这里写图片描述
这里写图片描述

分析:
首先我们要明确一个长度为 l l 的序列有多少种串法
假设我们从i位置开始穿入,那么我们只有两种选择: i+1,i1 i + 1 , i − 1
如果我们把穿过的珠子都删掉,那么每次我们还是只有两种选择: i+1,i1 i + 1 , i − 1
所以一个长度为 l l 的序列有2l1钟穿法

之后就有显而易见的dp
f[i][j] f [ i ] [ j ] 表示前 i i 个珠子,分成了j段的方案数

f[i][j]=k=j1i1f[k][j1]2ik1 f [ i ] [ j ] = ∑ k = j − 1 i − 1 f [ k ] [ j − 1 ] ∗ 2 i − k − 1

看一下DP给出的官方题解:

50%
观察方程
发现是一个卷积的形式——模数也是NTT模数
于是用NTT优化转移,得到 n2logn n 2 l o g n 的做法

70%
考虑T=1的情况
可以直接用卷积快速幂,加速转移得到结果
时间复杂度为 O(nlog2n) O ( n l o g 2 n )

100%
观察最初的方程:

f[i][j]=k=j1i1f[k][j1]2ik1 f [ i ] [ j ] = ∑ k = j − 1 i − 1 f [ k ] [ j − 1 ] ∗ 2 i − k − 1

f[i][j]=k=j1i1f[k][j1](2nk12in) f [ i ] [ j ] = ∑ k = j − 1 i − 1 f [ k ] [ j − 1 ] ∗ ( 2 n − k − 1 ∗ 2 i − n )

f[i][j]=2ink=j1i1f[k][j1]2nk1 f [ i ] [ j ] = 2 i − n ∗ ∑ k = j − 1 i − 1 f [ k ] [ j − 1 ] ∗ 2 n − k − 1

预处理 i1k=j1f[k][j1]2nk1 ∑ k = j − 1 i − 1 f [ k ] [ j − 1 ] ∗ 2 n − k − 1
这样就可以 n2 n 2 转移啦

然而

开局一张表,规律全靠找
暴力出奇迹,乱搞压正解
我们打一个优美的表:
这里写图片描述
以我的找规律能力真的看不出来有什么规律
(勉强找到一个规律: f[i][j]=(i1,j1)+(i1,j) f [ i ] [ j ] = ( i − 1 , j − 1 ) 这 一 列 的 前 缀 和 + ( i − 1 , j ) 这 一 列 的 前 缀 和
然而dalao给出结论:

f[i][j]=f[i1][j1]+2f[i1][j] f [ i ] [ j ] = f [ i − 1 ] [ j − 1 ] + 2 ∗ f [ i − 1 ] [ j ]

斗胆问了一下澍神,澍神给出了ta的规律:
这里写图片描述
对角线上的每一个数等于第一项乘 C(i,j) C ( i , j )

tip

对于这道题我真的无f*ck说
有了递推式,代码就没什么必要性了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值