洛谷P17259 [ICPC 2017 Urumqi R] Coins

发布时间:2026/8/22 17:21:52

洛谷P17259 [ICPC 2017 Urumqi R] Coins
hello~我又来了我这篇是本来要发洛谷题解的但是管理员给我打回了我改完了以后就不能交了所以我就在这里也写一篇啦题目传送门题目描述Alice 和 Bob 正在玩一个简单的游戏。他们将 n 枚相同的硬币排成一行初始时所有硬币均正面朝下放置在桌面上反面朝上。他们恰好进行 m 次操作每次任意选出 k 枚硬币抛向空中再以相同概率将它们正面朝上或正面朝下放回。他们的目标是使最终正面朝上的硬币尽可能多。输入格式输入包含多组测试数据第一行是一个整数 t (1≤t≤1000)表示测试数据的总组数。对于每组数据一行包含三个由空格分隔的整数 n、m (1≤n,m≤100) 和 k (1≤k≤n)。输出格式对于每组测试数据输出在最优策略下最终能够得到的正面朝上的硬币数量的期望值结果为一个实数精确到小数点后 3 位。输入输出样例输入6 2 1 1 2 3 1 5 4 3 6 2 3 6 100 1 6 100 2输出0.500 1.250 3.479 3.000 5.500 5.000好的题目我们就先说到这接下来是解析部分题目理解与分析题目描述了一个硬币游戏初始有n 枚硬币全部反面朝上即正面朝上的硬币数为 0。进行 m 次操作每次选择 k 枚硬币抛向空中每枚硬币以 0.5 的概率正面朝上或反面朝上。目标是经过 m 次操作后使正面朝上的硬币数尽可能多。我们需要求出在最优策略下最终正面朝上硬币数的期望值。关键点初始状态所有硬币反面朝上即正面朝上的硬币数为 0。操作规则每次选 kk 枚硬币抛掷后每枚硬币正面朝上的概率是 0.5反面朝上的概率也是 0.5。最优策略每次操作时如何选择 k 枚硬币使得最终正面朝上的硬币数期望最大。期望计算由于每次抛掷是独立的且每枚硬币正面朝上的概率是 0.5我们需要通过动态规划来跟踪正面朝上硬币数的概率分布并在每一步选择最优的 k 枚硬币。核心思路设当前正面朝上的硬币数为 i 反面朝上的硬币数为n-i。每次操作需要选k枚硬币。为了最大化最终正面朝上的硬币数我们应该优先选择反面朝上的硬币因为将它们抛掷后有 0.5 的概率变成正面而选择正面朝上的硬币抛掷后有 0.5 的概率变成反面这会减少正面朝上的硬币数。因此策略是尽可能多地选择反面朝上的硬币若反面硬币不足k枚则剩余的选择正面朝上的硬币。优化由于n,m≤100 k≤n 直接三维循环不可行但 xyk a和b的范围分别是 0∼x 和 0∼y 总组合数为(x1)(y1) 最大为 (k/21)²,当 k100 时50²2500m×n×2500100×100×25002.5×10⁷可以接受。预处理组合数 C(n,k) 和 0.5^n的幂次。接下来就是你们最喜欢的代码部分了这道题总体来说不是特别的难思路理清了之后就比较好做了。我考试时做的时候确实没有想到他竟然是一道普及的题我不是说我学的特好哈我也是错了好几次后才做对的。好了不说闲话了上代码。话说你们是喜欢没有注释的代码还是有注释的代码呢我写代码一般比较喜欢没注释的我在写代码前写的提示和伪代码最后都会删掉不然感觉怪怪的。参考代码带注释我认为有注释的是不是好理解一点所以加一个有注释的ps只是是我后期加上的如果不太理解的话可以私信我#include bits/stdc.h using namespace std; const int MAXN 105; double C[MAXN][MAXN]; double pow2[MAXN]; void precompute() { for (int i 0; i MAXN; i) { C[i][0] 1; for (int j 1; j i; j) { C[i][j] C[i-1][j-1] C[i-1][j]; } } pow2[0] 1.0; for (int i 1; i MAXN; i) { pow2[i] pow2[i-1] * 0.5; } } void solve() { int n, m, k; cin n m k; vectordouble dp(n 1, 0.0); dp[0] 1.0; for (int step 0; step m; step) { vectordouble np(n 1, 0.0); for (int i 0; i n; i) { if (dp[i] 0) continue; int r n - i; // 反面硬币数 int x min(r, k); // 选的反面硬币数 int y k - x; // 选的正面硬币数 double pe pow2[k];// 0.5^k for (int a 0; a x; a) { for (int b 0; b y; b) { int new_i i - y b a; double prob C[x][a] * C[y][b] * pe; np[new_i] dp[i] * prob; } } } dp np; } double ee 0.0; for (int i 0; i n; i) { ee i * dp[i]; } cout fixed setprecision(3) ee endl; } int main() { precompute(); int t; cin t; while (t--) { solve(); } return 0;//完结撒花 }参考代码赛时代码这个是我考试的时候写的代码没有注释的需要的可以自行取用不懂的不理解的可以来问我。#include bits/stdc.h using namespace std; const int MAXN 105; double C[MAXN][MAXN]; double pow2[MAXN]; void precompute() { for (int i 0; i MAXN; i) { C[i][0] 1; for (int j 1; j i; j) { C[i][j] C[i-1][j-1] C[i-1][j]; } } pow2[0] 1.0; for (int i 1; i MAXN; i) { pow2[i] pow2[i-1] * 0.5; } } void solve() { int n, m, k; cin n m k; vectordouble dp(n 1, 0.0); dp[0] 1.0; for (int step 0; step m; step) { vectordouble np(n 1, 0.0); for (int i 0; i n; i) { if (dp[i] 0) continue; int r n - i; int x min(r, k); int y k - x; double pe pow2[k]; for (int a 0; a x; a) { for (int b 0; b y; b) { int new_i i - y b a; double prob C[x][a] * C[y][b] * pe; np[new_i] dp[i] * prob; } } } dp np; } double ee 0.0; for (int i 0; i n; i) { ee i * dp[i]; } cout fixed setprecision(3) ee endl; } int main() { precompute(); int t; cin t; while (t--) { solve(); } return 0; }后记留言好了今天的讲解就到这里。附上我的AC记录如果有需要改正的地方或有不完美的地方欢迎私信我如果有不懂的欢迎私信我提问我会一一解答如果我回复的不是那么及时也请见谅马上开学了我比较忙。如果觉得我写的还行的话可以留下一个赞吗非常感谢。

相关新闻

Multimodal-Sentiment-Analysis 开源项目指南:目录结构、启动脚本与配置文件一次看懂

Multimodal-Sentiment-Analysis 开源项目指南:目录结构、启动脚本与配置文件一次看懂

2026/8/22 17:21:52

Multimodal-Sentiment-Analysis 开源项目指南:目录结构、启动脚本与配置文件一次看懂 【免费下载链接】Multimodal-Sentiment-Analysis 多模态情感分析——基于BERTResNet的多种融合方法 项目地址: https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analy…

Java SpringBoot+Vue3全栈开发大学生智能招聘系统

Java SpringBoot+Vue3全栈开发大学生智能招聘系统

2026/8/22 17:11:51

1. 项目概述:大学生就业招聘系统的技术架构与核心价值这个基于Java SpringBootVue3MyBatis的全栈项目,是专门为高校就业场景设计的智能化招聘管理系统。我在实际开发中发现,传统校园招聘平台普遍存在三个痛点:企业端操作复杂导致入…

APMCM数学建模竞赛全攻略:从组队到论文写作的实战指南

APMCM数学建模竞赛全攻略:从组队到论文写作的实战指南

2026/8/22 17:11:51

1. 项目概述:从“找队友”到“拿奖”的完整路径每年一到亚太杯APMCM(Asia and Pacific Mathematical Contest in Modeling)的报名季,各大高校的数学建模群里就会开始热闹起来。大家讨论的核心无非两个:“这题怎么搞&am…

2026招聘平台效果实测与选择策略

2026招聘平台效果实测与选择策略

2026/8/22 20:01:59

1. 招聘平台现状与核心痛点解析2026年的招聘市场已经形成了明显的垂直细分格局,不同行业、不同职级、不同求职场景下的平台选择差异显著。作为从业12年的人力资源顾问,我经手过237家企业招聘案例,实测发现:平台效果与行业匹配度的…

智能简历筛选系统:原理、技术与应用实践

智能简历筛选系统:原理、技术与应用实践

2026/8/22 20:01:59

1. 简历机筛流程的核心价值解析 在招聘旺季,HR部门每天需要处理数百份甚至上千份简历的场景已经成为常态。以赛力斯这样的头部企业为例,单次校招季收到的简历数量往往突破五位数。传统人工筛选方式不仅效率低下,还存在主观性强、标准不统一等…

数学建模竞赛实战:从全球变暖数据到量化分析模型

数学建模竞赛实战:从全球变暖数据到量化分析模型

2026/8/22 20:01:59

1. 从“全球变暖?”这个问号说起:一次竞赛题的深度拆解看到“全球变暖?”这个标题,后面跟着一个问号,很多人的第一反应可能是:这不是一个早已有定论的科学问题吗?怎么还成了研究生数学建模竞赛的…

AI求职助手Career-Ops:简历优化与面试模拟全解析

AI求职助手Career-Ops:简历优化与面试模拟全解析

2026/8/22 20:01:59

1. 项目概述Career-Ops是一个专为求职场景设计的智能辅助系统。它通过AI技术模拟人力资源专家的思维模式和工作流程,为求职者提供从简历优化到面试准备的全流程支持。不同于通用型求职工具,这个系统最大的特点是能够深度理解不同行业、岗位的差异化需求&…

技术岗位画像分析:精准招聘与人才培养的科学方法

技术岗位画像分析:精准招聘与人才培养的科学方法

2026/8/22 20:01:59

1. 岗位画像分析概述最近在帮一家中型互联网公司做人才盘点时,发现他们HR部门对技术岗位的招聘标准相当模糊。产品经理要懂Python到什么程度?前端开发需要掌握哪些框架?这些问题在不同面试官那里竟然有完全不同的答案。这让我意识到&#xff…

HMCL-PE 保姆级指南:在手机上运行 Minecraft Java 版

HMCL-PE 保姆级指南:在手机上运行 Minecraft Java 版

2026/8/22 19:51:59

HMCL-PE 保姆级指南:在手机上运行 Minecraft Java 版 【免费下载链接】HMCL-PE-CN Hello Minecraft! Launcher for Android 项目地址: https://gitcode.com/gh_mirrors/hmc/HMCL-PE-CN HMCL-PE 是一款 Android 平台的 Minecraft Java 版启动器,能…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/21 21:41:19

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/22 11:09:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

多尺度智能体控制:从宏观密度场到微观决策的架构与实践

2026/8/22 0:00:52

1. 从宏观到微观:多尺度智能体控制的核心挑战在智能体(Agent)技术日益普及的今天,我们面临着一个越来越普遍的难题:如何同时管理成千上万个,甚至百万级别的智能体?无论是城市交通中的自动驾驶车…

CUBE标准:统一AI智能体评测的度量衡与架构解析

CUBE标准:统一AI智能体评测的度量衡与架构解析

2026/8/22 0:00:52

1. 项目概述:为什么我们需要一个统一的智能体评测标准?最近在折腾各种AI智能体项目,从简单的自动化脚本到复杂的多模态交互系统,我发现了一个让人头疼的共性问题:评测。每次开发完一个智能体,想看看它到底行…

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

2026/8/22 0:00:52

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…