[DynamicProgramming]动态规划题目泛做

本文详细分析了多道涉及动态规划的编程竞赛题目,包括Educational Codeforces Round 12 F、Codeforces Round #346 G等。题目涵盖了寻找特定因数个数的数、计算取走竖方格方案数、优化路径中质因数个数、最长合法括号子串等多种问题。通过动态规划方法,深入探讨了解决这些问题的关键思路和解决方案。
摘要由CSDN通过智能技术生成

Educational Codeforces Round 12 F

大意
n(n<=1011) 以内恰好有 4 个因数的数的个数
分析
首先一个数恰好有 4 个因数,说明它质因数分解之后是两个质数的乘积或是一个质数的三次方,对于后一种情况我们直接 n1/3 就能算出来,关键在于计算 n 以内有多少个数是两个素数的乘积。
n=p1p2 ,则必然有 p1<n,p2>n ,我们枚举 p1 ,那么问题就在于 np1 内有多少个素数。
这一点我们用dp来解决。
pj 为第 j 个素数, dp[n][j] [1,n] 以内最小质因子 >=pj 的数的数量,我们有
1.dp[n][1]=n
2.dp[n][j]=dp[n][j+1],dp[n/pj][j] ,
也就是说 dp[n][j+1]=dp[n][j]dp[n/pj][j]
pk 是最小的大于 n 的素数,那么 π(n)=dp[n][k]+k1

Codeforces Round #346 G

大意:
n ( n106 )个长度为 hi 的竖方格,允许取走连续若干个竖方格的顶部(不允许取最底层),求方案数
分析:
dp[l][r] 为取走的区间为 [l,r] 的方案数,总方案数就是

ans=l=1nr=lndp[l][r]

l=r 时, dp[l][l]=hl1
l<r 时, dp[l][r]=min(hl1,hl+11)Πr1i=l+1min(hi11,hi1,hi+11)min(hr11,hr1)
那么我们有
ans=ni=1(hi1)+nl=1nr=l+1min(hl1,hl+11)Πr1i=l+1min(hi11,hi1,hi+11)min(hr11,hr1)
关键在于后一个长长的式子,即
nl=1nr=l+1min(hl
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值