acm-(好题、神题)2020-2021 Winter Petrozavodsk Camp, Day 5 B.Lockout vs tourist
传送门
简要题意:你和tourist一起比赛做题,你们两个每轮同时决策做哪道题,如果选择相同的题目,那么你不得分,比赛继续进行,如果选择了不同的题目,那么你能拿下你选择的这道题的全部分数,比赛结束,tourist想让你得分最少,你想让得分最多,问在双方均采取最优决策的情况下你的期望得分。
这道题一看就非常难以下手,直接给出题解的神仙做法吧。首先tourist的决策一定是基于概率的,我们考虑给每个问题设置一个概率pip_ipi,代表touristtouristtourist有pip_ipi的概率在当前轮中选择问题iii,那么为了让你比分最小化,我们需要对于所有可能的ppp数组产生的得分期望取最小值。而对于每个ppp数组你则是想要让得分期望最大化,因此tourist必会考虑让你的最大化期望最小,对于固定的ppp数组你的最大化期望是maxi{ai(1−pi)+bipi}\max_{i}\{a_i(1-p_i)+b_ip_i\}maxi{ai(1−pi)+bipi},其中bib_ibi代表除去第iii道题后在剩下的题中进行最优博弈对应的得分期望(这样可以状压dp处理),这个式子的意思就是,假如你在当前轮选择做第iii道题目,那么你有1−pi1-p_i1−pi的概率成功得到这个题目的分数,这时候比赛也就结束了,当然也有pip_ipi的概率跟tourist选择了同一道题从而不能拿下该题的分数,这时候的期望分数对应的是一个子问题的博弈结果,即在现有题目基础上除去第iii道题后对应的博弈结果。而tourist自然会取minp{maxi{ai(1−pi)+bipi}}\min_p\{\max_{i}\{a_i(1-p_i)+b_ip_i\}\}minp{maxi{ai(1−pi)+bipi}},这便是最终博弈对应的答案。
然后还需要观察到一个性质,在对aaa数组从小到大排序之后,满足∀i<j,ai≤aj,bi≥bj\forall i<j,a_i\le a_j,b_i\ge b_j∀i<j,ai≤aj,bi≥bj,这个很容易想明白,接下来我们考虑让上面那个式子的所有pip_ipi都为000,我们现在有要找一个ppp的分配方案,满足所有ppp之和为111并且ai(1−pi)+bipia_i(1-p_i)+b_ip_iai(1−pi)+bipi的最大值最小。令fi=ai(1−pi)+bipif_i=a_i(1-p_i)+b_ip_ifi=ai(1−pi)+bipi,由于此时pi=0p_i=0pi=0,因此fi=aif_i=a_ifi=ai,函数单调不减,最大值在fnf_nfn处取得,考虑增加pnp_npn看看会发生什么,如果an>bna_n>b_nan>bn,增加pnp_npn会让fnf_nfn减小,我们看看fnf_nfn能否减小为fn−1f_{n-1}fn−1,如果能减少到,那么我们考虑继续分配ppp给pn−1p_{n-1}pn−1和pnp_npn,看fnf_nfn和fn−1f_{n-1}fn−1能否减少到fn−2f_{n-2}fn−2…如果减少不到,那么把剩下可用的ppp值全部分给pnp_npn即可。如果an<=bna_n<=b_nan<=bn,那么不能分配ppp给pnp_npn,而是分给其它pip_ipi,容易发现无论如何分配都满足fi<=fnf_i<=f_nfi<=fn,因为bi<=anb_i<=a_nbi<=an。此外,再迭代处理的过程中,若发现有ai<=bia_i<=b_iai<=bi,那么此时可以把剩下的ppp全部分给前面的pj(j>i)p_j(j>i)pj(j>i),这样aia_iai就是全局能取到的最小值了。
说了这么多感觉还是非常乱,这道题就是非常神仙。 下面直接看看代码吧。
#include <bits/stdc++.h>
using namespace std;const int maxn = 22;
typedef double db;
typedef long long ll;int c[maxn],tot=0;
db a[maxn],b[maxn];
db dp[1<<maxn];db solve(int n){db sumder=0,sump=0;if(a[1]<=b[1])return a[1];sumder=1./(a[1]-b[1]);for(int i=2;i<=n;++i){db deta=a[i-1]-a[i];db ad=deta*sumder;if(sump+ad>1)return a[i-1]-(1-sump)/sumder;if(a[i]<=b[i])return a[i];sumder+=1./(a[i]-b[i]);sump+=ad; }return a[n]-(1-sump)/sumder;
}
int main(){int n;scanf("%d",&n);for(int i=0;i<n;++i)scanf("%d",&c[i]);sort(c,c+n);for(int i=1;i<(1<<n);++i){tot=0;for(int j=n-1;j>=0;--j){if(!((i>>j)&1))continue;a[++tot]=c[j];b[tot]=dp[i^(1<<j)];}dp[i]=solve(tot);} printf("%.12lf\n",dp[(1<<n)-1]);
}
acm-(好题、神题)2020-2021 Winter Petrozavodsk Camp, Day 5 B.Lockout vs tourist相关推荐
- 2020-2021 Winter Petrozavodsk Camp, Belarusian SU Contest (XXI Open Cup, Grand Prix of Belarus)
题目链接 C. Brave Seekers of Unicorns 给出一个好数组的定义: 1.1.1. 长度不为空 2.2.2. a[i]⨁a[i−1]⨁a[i−2]≠0a[i] \bigoplus ...
- A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析)
A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析),本文转载竞赛赛题.评阅要点,进行赛题解读和分析. 评阅要点为竞赛组委会官方公布,完整体现了解题思路. 本文首发于 ...
- A4.2021年全国数学建模竞赛A题-赛题分析与评阅要点(FAST主动反射面的形状调节)
Python小白的数学建模课-A4.2021年全国数学建模竞赛A题(FAST主动反射面的形状调节),本文转载竞赛赛题.评阅要点,进行赛题解读和分析. 评阅要点为竞赛组委会官方公布,完整体现了解题思路. ...
- 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)
2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...
- 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB 写的 ===2018.9.6=== 这一次算理解深一点了 ...
- 【CF913F】Strongly Connected Tournament 概率神题
[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...
- 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议
今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...
- 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏
第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...
- [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)
4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 629 Solved: 371 [Submit][Stat ...
最新文章
- html 11 内联(行内)
- NIPS2020 | DiffGCN:利用微分算子和代数多重网格池化优化图卷积
- css 宽高自适应的div 元素 如何居中 垂直居中
- 动态规划之两个字符串的最大子序列
- 锐捷发布极简以太全光解决方案 打造“不一样”的全光网
- 计算机辅助初中英语教学,初中英语CAI课件制作初探
- openresty总结
- mysql远程登录备份_mysql实现自动远程备份一办法(转)
- Delphi创建对象时,Application、Self、nil三者的区别
- LaTeX实战经验:如何插入程序代码
- java中图片排版_基于Java的图像排版系统的设计.pdf
- 国内最新语音服务器,语音聊天社交很热门,带你搭建自己的语音聊天服务器
- 吐血整理C++书单,萌新到大牛,要看哪些书?
- unbuntu20.0.4 显卡驱动安装,nividia-smi无效
- 学习python-day01-13---转自Python分布式爬虫打造搜索引擎Scrapy精讲
- 什么是固态硬盘及其优缺点【转】
- Spring-Cache
- 关于汇编语言中的转移指令原理——offset
- 如何去除PDF中的水印,PDF去水印方法
- 近红外光谱预处理方法
热门文章
- 5G 和 WiFi-6,谁是智能制造的主角?
- coreldraw带圈字符_coreldraw中如何使字体围绕一个圆形排列?
- 快速连接github(修改hosts文件)
- H5之外部浏览器访问微信客户端网页
- Kubernetes控制平面组件:Controller-Manager控制器管理
- MySQL查询报错Unknown column ‘new_edition‘ in ‘IN/ALL/ANY subquery‘
- 【新书推荐】崛起的超级智能:互联网大脑如何影响科技未来
- android 显示表情符号,在Android中显示表情符号
- 2017.7.10 noi2008 假面舞会
- ES6对数组进行正序和倒序排列