CSUST第六次周赛题解

这次周赛好多dp啊,好在前几天补了几道dp,不然大概率爆0了。

A .pph的篮球考试

题意
n次投篮,每次进的概率已知,分别求进 n,n-1,n-2…n-5次的概率

思路
可以用 dp[ i ][ j ]表示前 i 次投篮有 j 次没进。
dp[ i ][ j ]=dp[ i-1 ][ j ]*(ai)+dp[ i-1 ][ j-1 ]*(1-ai);
也就是这次有没进和进两种可能。
然后发现本次状态只与上次有关,用滚动数组优化一下。

注意
留意一下边界值。
还有什么行末不能有空格?
还有求逆元那里记得优化一下(比赛的时候先wa,后tle,难受)
代码:

B 摸鱼的tomjobs

题意
n个作业,每个包含有ai作业量,选了含 val 作业量的作业,就不能再选 val+1和 val-1的作业量的作业,问最多能选多少作业量的作业;

思路
可以把所有含 val 作业量的作业都加到一起,记为 v[ val ],
然后 dp[ i ]表示作业量为1-i 的作业中可选作业的最大值
转移方程: dp[i]=max(dp[i]+dp[i-2]+v[i],dp[i-1]);
代码:

C万能代码

题意
给一个字符串,对其进行压缩,求压缩后长度的最小值。
压缩规则:habcabcabc 可压缩为 hMabcRR ,M表示重复串的开始,R 表示重复部分。若R前面没有M 默认 M在串的前面。
思路
区间 dp, 用 dp[ i ][ j ]表示 i 到 j 的最短长度。
对于每一个 dp[ i ][ j ],可以枚举分割点 k (i<=k<j),如果区间【k+1,j】是区间【i,k】的循环,那么我们可以进行压缩。
例如 abcabcabc 如果分割为 abc 和 abcabc,那就可以压缩为MabcRR,但如果分割为 ab和cabcabc,那么不能压缩。
能压缩:dp[i][j]=min(dp[i][j],k-i+1+(j-k)/(k-i+1)+1);
注意 如果 i=0,则不需要 M,则不需要 +1
不能压缩:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
代码:

D序列变换:

题意
初始 str 为 0,进行 N 次操作,每次把 “0” 变成 “01”,“1”变成 “10”,问操作后 str 中 “00” “01” “10” “11”,作为子串各出现了 多少次。
思路
因为每个 N 都对应着一个唯一的答案,然后我就想打表找规律了,果然规律很好找。
代码:

E种花

题意
n个人种花,给出每个人种花数量的可能区间,如果相邻两人种花数量和为p的倍数,则两人各获得1000元,求所有人工资的期望值。
思路
什么情况下能获得2000元呢,就是两个人中任意一个人拿到了 p(p是质数)的倍数,那么就可以获得2000元。
所以 相邻两人(a和b)拿到钱的概率为 1-Pa*Pb(pa表示a拿不到p的倍数的概率),其实正着求也可以,不过这样更简单。
所有概率加起来乘2000就好了
代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值