博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】 bzoj3450 JoyOI1952 Easy (期望dp)
阅读量:4457 次
发布时间:2019-06-08

本文共 934 字,大约阅读时间需要 3 分钟。

Solution

  • 期望的题目真心不太会
  • 定义状态\(f[i]\)表示到第\(i\)期望长度,\(dp[i]\)表示期望分数
  • 如果上一步的持续\(o\)长度为\(L\),那么贡献是\(L^2\),现在长度为\(L+1\),贡献是\(L^2+2*L+1\),那么添加量就是\(2*L+1\)
  • 所以我们可以得到转移方程:

    \(ch[i]==o\) 时,\(f[i]=f[i-1]+1 ~~~~~~~~~~~ dp[i]=dp[i-1]+f[i-1]*2+1\)

    \(ch[i]==x\) 时,\(f[i]=0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dp[i]=dp[i-1]\)
    \(ch[i]==?\) 时,\(f[i]=(f[i-1]+1)/2 ~~~~~dp[i]=dp[i-1]+(f[i-1]*2+1)/2\)

Code

//it is coded by ning_mew on 7.22#include
using namespace std;const int maxn=3e5+7;double ans=0,dp[maxn],f[maxn];int n;char ch[maxn];int main(){ scanf("%d",&n); scanf("%s",ch); for(int i=1;i<=n;i++){ if(ch[i-1]=='x'){f[i]=0;dp[i]=dp[i-1];continue;} if(ch[i-1]=='o'){f[i]=f[i-1]+1;dp[i]=dp[i-1]+f[i-1]*2+1;continue;} if(ch[i-1]=='?'){f[i]=0.5*f[i-1]+0.5;dp[i]=dp[i-1]+(f[i-1]*2+1)/2;continue;} }printf("%0.4f\n",dp[n]);return 0; }

博主蒟蒻,随意转载。但必须附上原文链接:,否则你会场场比赛暴0!!!

转载于:https://www.cnblogs.com/Ning-Mew/p/9351389.html

你可能感兴趣的文章
vue-textarea 自适应高度
查看>>
(2)数据结构——线性表(链表)实现
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
sqlserver打开对象资源管理器管理的帮助文档的快捷键
查看>>
JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
【设计模式】4、原型模式
查看>>
进入meta模式关闭背光灯
查看>>
webstorm上svn的安装使用
查看>>
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>
使用 Bootstrap Typeahead 组件
查看>>
EF不能很好的支持DDD?估计是我们搞错了!
查看>>
Qt 静态库与共享库(动态库)共享配置的一个小办法
查看>>
linux_cacti 配置之 安装snmp 服务
查看>>
201407-至今
查看>>
c# 应用事务
查看>>