hdu 5236

news/2024/11/24 7:22:01/

http://acm.hdu.edu.cn/showproblem.php?pid=5236

这是一道概率dp+贪心题;

建立状态dp[i], 表示敲出i个字符的期望次数,
那么有 dp[i] = dp[i-1] + p*(1 + dp[i]) + (1-p);

解释一下: 敲出i个字符, 首先得敲出i-1个字符, 所以有第一部分的dp[i-1]; 然后敲下一个字符时, 有两种可能, p概率会丢失, (1-p)概率不会丢失, 对于丢失的情况就还得重新敲dp[i]次了(期望次数), 不丢失的情况就只有一次就成功了, 所以是(1-p) * 1。

解出 dp[i] = (dp[i-1] + 1) / ( 1- p), dp部分就搞定了;

接下来是贪心部分; 我们能够看出来dp[i]的导数是递增的, 也就是说dp[i]随i的增大, dp[i]增大的越快。 所以如果对于i个字符分两部分来完成的话, 两个部分尽量均匀才是最优的(高中数学, 画个图像也很容易理解);
所以我们可以枚举保存的次数k, 保存k次就相当于把n个字符分成k部分来完成, 由上面结论可知, 这k部分尽量均匀。

代码如下:

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
const int maxn = 110010;int n, x;
double p, dp[maxn];double cal(int k) {int len = n/k;double ans = 0;if(n%k) {ans = (dp[len + 1] + x) * (n%k) + (dp[len] + x) * (k - n%k);}else {ans = (dp[len] + x) * k;}return ans;
}int main() {int t; scanf("%d", &t);for(int cas=1; cas<=t; cas++) {printf("Case #%d: ", cas);scanf("%d%lf%d", &n, &p, &x);for(int i=1; i<=n+x; i++) dp[i] = (dp[i-1] + 1) / (1-p);double ans = dp[n] + x;for(int i=2; i<=n; i++) ans = min(ans, cal(i));printf("%.6f\n", ans);}return 0;
}

http://www.ppmy.cn/news/165440.html

相关文章

HDU 5236 Article

题目来源&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5236 题意&#xff1a;打印一篇论文需要按键n次&#xff0c;在每i0.1秒时打&#xff0c;在第i0.9秒时有p的概率系统崩溃&#xff0c;崩溃后需要回退到开头或上次保存的地方重新开始。可以选择在第i秒时按下x个…

达梦8之非默认端口(5236)如何实现操作系统认证登录

达梦8之非默认端口(5236)如何实现操作系统认证登录 1、背景 近期遇到诸多金融类项目&#xff0c;在实际生产环境中对达梦SYSDBA默认密码和实例端口&#xff0c;均不允许缺省设置&#xff0c;由此需修改SYSDBA默认密码和默认实例端口号&#xff0c;本文为大家介绍同时修改SYSD…

java中实现对象属性复制的工具类

在 Java 中&#xff0c;有多个工具类可用于实现对象属性的复制&#xff0c;使得属性值从一个对象复制到另一个对象。以下是几个常用的工具类&#xff1a; Apache Commons BeanUtils&#xff1a; Apache Commons BeanUtils 提供了 BeanUtils 类&#xff0c;可以方便地进行属性…

【从零开始进行高精度手眼标定 eye in hand(小白向)1 原理推导】

从零开始进行高精度手眼标定 eye in hand&#xff08;小白向&#xff09;1 原理推导 前言原理推导公式推导为什么在数据采集中至少需要两个位姿信息 MATLAB编程计算A矩阵的计算和获取matlab计算代码B矩阵的计算和获取matlab计算矩阵B 前言 最近由于组内的相关工作需求&#xf…

基于linux的程序库文件打包和调用的实现(二)——动态库文件打包和调用

随着技术的发展&#xff0c;基于linux项目的软件代码越发复杂&#xff0c;原来一个人可以完成的软件项目&#xff0c;现在可能需要多个人合作、多个部门合作、多个企业合作&#xff0c;每个人、每个部门、每个企业可能负责部分软件模块的开发。各个软件模块在调试过程由于涉及企…

从小白到大佬,入门Linux系统收发网络数据包的秘密/

Linux 服务器收到网络数据包&#xff0c;需求经过哪些处置&#xff0c;一步步将数据传给应用进程的呢&#xff1f;应用进程发送数据包时&#xff0c;Linux 又是如何操作将数据包发送进来的呢&#xff1f;今天我们就来聊聊这个话题。 在准备好接纳网络数据包之前&#xff0c;Li…

Talk预告 | 罗格斯大学徐子昊:在域迁移学习中,用变分推理自动生成可解释的域索引

本期为TechBeat人工智能社区第501期线上Talk&#xff01; 北京时间5月31日(周三)20:00&#xff0c;罗格斯大学 在读博士生—徐子昊的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “在域迁移学习中&#xff0c;用变分推理自动生成可解释的域索引…

第六十三天学习记录:C语言个人总结

在花了差不多2个月的时间&#xff0c;完整的跟着一个视频课程将C语言较为系统的学习了一遍。尽管C语言在大学的时候为了考计算机二级等级考试而自学过&#xff0c;但十多年后的今天再次学习时却如初见。 通过这次学习可以说是收获颇多。 给我印象最深刻的是&#xff1a; 1、指针…