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

BZOJ P1419 Red is good


题目传送门


思路

状态设计

我们可以想象先把所有牌倒入一个袋子中,然后在一个一个取。
d p i , j dp_{i, j} dpi,j 表示目前袋中有【 i i i 个红牌】和【 j j j 个黑牌】。

状态转移

现在考虑从袋子中抓牌:

  1. 抓到的是红牌:
    抓到红牌的概率是 i i + j \frac{i}{i + j} i+ji,抓后袋子中还剩下 i − 1 i - 1 i1 个红牌和 j j j 个黑牌,那么抓到红牌的期望贡献就是 i i + j × ( d p i − 1 , j + 1 ) \frac{i}{i + j} \times (dp_{i - 1, j} + 1) i+ji×(dpi1,j+1)
  2. 抓到的是黑牌:
    抓到黑牌的概率是 j i + j \frac{j}{i + j} i+jj,抓后袋子中还剩下 i i i 个红牌和 j − 1 j - 1 j1 个黑牌,那么抓到红牌的期望贡献就是 j i + j × ( d p i , j − 1 + 1 ) \frac{j}{i + j} \times (dp_{i, j - 1} + 1) i+jj×(dpi,j1+1)
  3. 随时停止:因为有可以随时停止这一限制,所以在转移时,我们要将 d p i , j − 1 dp_{i, j - 1} dpi,j1 d p i − 1 , j dp_{i - 1, j} dpi1,j 0 0 0 m a x max max。因为再在剩下的牌中取时,期望已经是负数,所以取的话肯定更劣。与 0 0 0 m a x max max 就相当于是停止取牌。

因此总得转移方程就是:
d p i , j = i i + j × ( m a x ( d p i − 1 , j , 0 ) + 1 ) + j i + j × ( m a x ( d p i , j − 1 , 0 ) + 1 ) dp_{i, j} = \frac{i}{i + j} \times (max(dp_{i - 1, j}, 0) + 1) + \frac{j}{i + j} \times (max(dp_{i, j - 1}, 0) + 1) dpi,j=i+ji×(max(dpi1,j,0)+1)+i+jj×(max(dpi,j1,0)+1)

边界条件

当没有黑牌的时候, ∀ i ∈ [ 1 , n ] , d p i , 0 = i \forall i \in [1, n], \ dp_{i, 0} = i i[1,n], dpi,0=i

复杂度

  • 时间复杂度 O ( n × m ) O(n \times m) O(n×m)
  • 空间由于限制了 64 M B 64MB 64MB,所以要用滚动数组,最后为 O ( m ) O(m) O(m)

代码

#include <bits/stdc++.h>using namespace std;const int maxn = 5e3 + 7;int n, m;
double dp[2][maxn];
int main() {scanf("%d%d", &n, &m);	for (int i = 1; i <= n; ++i) {int now = i & 1, lst = (i - 1) & 1;dp[now][0] = i;for (int j = 1; j <= m; ++j) {dp[now][j] = (max(dp[lst][j], 0.0) + 1) * i / (i + j) + (max(dp[now][j - 1], 0.0) - 1) * j / (i + j);}}int x = dp[n & 1][m] * 1e6;  // 不进位保留 6 位 小数printf("%.6lf\n", max(0.0, x * 1e-6));return 0;
} 
http://www.xdnf.cn/news/449.html

相关文章:

  • 软件测试--自动化测试1
  • 如何使用flatten函数在Terraform 中迭代嵌套map
  • 【HDFS入门】HDFS性能调优实战:压缩与编码技术深度解析
  • 若依(笔记)
  • C++入门小馆: 深入string类
  • Redis启动报错(error) NOAUTH Authentication required
  • NodeRED模拟复杂流程处理
  • MACOS 上的 快捷指令怎么用,有哪些分享资源可以用
  • WSL (ext4.vhdx文件)占用空间过大,清理方式记录,同时更改 WSL 保存位置
  • 电脑 访问 github提示 找不到网页,处理方案
  • CRC实战宝典:从原理到代码,全面攻克循环冗余校验
  • 驱动-自旋锁死锁
  • Linux系统之部署TestNet资产管理系统
  • Java使用javacv实现的多种音视频格式播放器
  • 字符串系列一>二进制求和
  • 【重走C++学习之路】12、模板进阶
  • 智慧农业新视界:视频监控管理平台如何赋能现代农业
  • Trae,字节跳动推出的 AI 编程助手插件
  • TensorFlow 实现 Mixture Density Network (MDN) 的完整说明
  • JavaScript 回调函数详解
  • spring三级缓存如何解决循环依赖问题
  • 数量关系 多级数列1
  • 文档内容提取以及合成
  • 卸载Anaconda并保留虚拟环境,重装Anaconda并还原之前的虚拟环境
  • [Swift]pod install成功后运行项目报错问题error: Sandbox: bash(84760) deny(1)
  • 老年保健与管理实训室建设要点:设备选型与技术应用关键
  • ELK日志系统
  • 卷积神经网络基础(二)
  • Redis-分布式锁
  • PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(二)