当前位置: 首页 > news >正文

ZOJ 3329 期望DP

题目大意:

给定3个已经规定好k1,k2,k3面的3个色子,如果扔到a,b,c则重新开始从1 计数,否则不断叠加所有面的数字之和,直到超过n,输出丢的次数的数学期望

 

我们在此令dp[]数组记录从当前数值到结束的数学期望

假如有3个面数都为2的色子

那么dp[i] = 1.0 / 2/2/2 * dp[0] + 1.0/8*dp[i+3] +3.0/8*dp[i+4]+3.0/8*dp[i+5]+1.0/8*dp[i+6] + 1

当然那些下标大于i的dp值均为0

可是我们这样从后往前推会导致无法计算dp[0]的数值,没法推

 

从新寻找规律,可以看做

dp[i] = a[i] * dp[0] + b[i]; 1式

dp[i] = p0 * dp[0] + ∑(dp[i+k]*p[k]) + 1; 2式

1式代人2式

dp[i] = p0*dp[0] + ∑((a[i+k]*dp[0]+b[i+k]))*p[k])+1

dp[i] =( p0+∑(a[i+k]*p[k])) dp[0] + ∑(b[i+k]*p[k]) +1

 

所以a[i] =p0+∑(a[i+k]*p[k])      b[i] = ∑(b[i+k]*p[k]) +1

这样我们由后往前推不断得到所有的a[i]和b[i]值

 

dp[0] = a[0]*dp[0]+b[0]

这样我们得到a[0],b[0]就很容易得到dp[0]的值了

 

这是这段叠加处求a,b数组的代码

memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        for(int i=n;i>=0;i--){
            for(int j=3;j<=maxn;j++)
            {
                a[i]+=a[i+j] * pro[j];
                b[i]+=b[i+j] * pro[j];
            }
            a[i]+=1.0/k1/k2/k3;
            b[i]+=1;
        }

 

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 double pro[20],a[600],b[600];
 6 
 7 int main()
 8 {
 9     int n,k1,k2,k3,d,e,f,T;
10     scanf("%d",&T);
11     while(T--){
12         scanf("%d%d%d%d%d%d%d",&n,&k1,&k2,&k3,&d,&e,&f);
13 
14         int maxn = k1+k2+k3;
15         memset(pro,0,sizeof(pro));
16         for(int i=1;i<=k1;i++){
17             for(int j=1;j<=k2;j++){
18                 for(int k=1;k<=k3;k++)
19                     if(i!=d||j!=e||k!=f)
20                         pro[i+j+k]++;
21             }
22         }
23 
24         for(int i=3;i<=maxn;i++)
25             pro[i] = pro[i]*1.0/k1/k2/k3;
26 
27         memset(a,0,sizeof(a));
28         memset(b,0,sizeof(b));
29         for(int i=n;i>=0;i--){
30             for(int j=3;j<=maxn;j++)
31             {
32                 a[i]+=a[i+j] * pro[j];
33                 b[i]+=b[i+j] * pro[j];
34             }
35             a[i]+=1.0/k1/k2/k3;
36             b[i]+=1;
37         }
38 
39         double ans = b[0] / (1-a[0]);
40         printf("%.10f\n",ans);
41     }
42 }

 

转载于:https://www.cnblogs.com/CSU3901130321/p/3995664.html

相关文章:

  • C语言 21-结构体
  • Java学习笔记2:当构造方法有多个参数时考虑使用Builder
  • Perl:Perl的一些应用例子。
  • 指针传递参数_for chris
  • COCOS2D-X 精灵创建随笔
  • 太上感应篇原文
  • 汉字简体繁体转换----Javascript
  • 让你飞翔
  • ODB 短板
  • 解压版MySQL安装说明
  • SoftReference
  • 现代软件工程 第十二章 【用户体验】练习与讨论
  • solr默认查询设置
  • 博客开通
  • 在关闭页面时自动清除Session cookie,页面缓存
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • CSS魔法堂:Absolute Positioning就这个样
  • Cumulo 的 ClojureScript 模块已经成型
  • HTTP--网络协议分层,http历史(二)
  • Koa2 之文件上传下载
  • Laravel5.4 Queues队列学习
  • PaddlePaddle-GitHub的正确打开姿势
  • PHP的类修饰符与访问修饰符
  • Quartz初级教程
  • React系列之 Redux 架构模式
  • Redis中的lru算法实现
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue数据传递--我有特殊的实现技巧
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 解析带emoji和链接的聊天系统消息
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端技术周刊 2019-01-14:客户端存储
  • 设计模式(12)迭代器模式(讲解+应用)
  • 设计模式走一遍---观察者模式
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 国内开源镜像站点
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​TypeScript都不会用,也敢说会前端?
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)Android开发优化---------UI优化
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Java)【深基9.例1】选举学生会
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)VirtualBox安装增强功能
  • (转)http协议
  • (转载)从 Java 代码到 Java 堆
  • ******之网络***——物理***
  • .gitignore文件_Git:.gitignore
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET序列化 serializable,反序列化
  • .NET正则基础之——正则委托
  • /etc/fstab 只读无法修改的解决办法
  • @angular/cli项目构建--http(2)
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)