传送门
简要题意:你和tourist一起比赛做题,你们两个每轮同时决策做哪道题,如果选择相同的题目,那么你不得分,比赛继续进行,如果选择了不同的题目,那么你能拿下你选择的这道题的全部分数,比赛结束,tourist想让你得分最少,你想让得分最多,问在双方均采取最优决策的情况下你的期望得分。

这道题一看就非常难以下手,直接给出题解的神仙做法吧。首先tourist的决策一定是基于概率的,我们考虑给每个问题设置一个概率pip_ipi​,代表touristtouristtourist有pip_ipi​的概率在当前轮中选择问题iii,那么为了让你比分最小化,我们需要对于所有可能的ppp数组产生的得分期望取最小值。而对于每个ppp数组你则是想要让得分期望最大化,因此tourist必会考虑让你的最大化期望最小,对于固定的ppp数组你的最大化期望是max⁡i{ai(1−pi)+bipi}\max_{i}\{a_i(1-p_i)+b_ip_i\}maxi​{ai​(1−pi​)+bi​pi​},其中bib_ibi​代表除去第iii道题后在剩下的题中进行最优博弈对应的得分期望(这样可以状压dp处理),这个式子的意思就是,假如你在当前轮选择做第iii道题目,那么你有1−pi1-p_i1−pi​的概率成功得到这个题目的分数,这时候比赛也就结束了,当然也有pip_ipi​的概率跟tourist选择了同一道题从而不能拿下该题的分数,这时候的期望分数对应的是一个子问题的博弈结果,即在现有题目基础上除去第iii道题后对应的博弈结果。而tourist自然会取min⁡p{max⁡i{ai(1−pi)+bipi}}\min_p\{\max_{i}\{a_i(1-p_i)+b_ip_i\}\}minp​{maxi​{ai​(1−pi​)+bi​pi​}},这便是最终博弈对应的答案。

然后还需要观察到一个性质,在对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​)+bi​pi​的最大值最小。令fi=ai(1−pi)+bipif_i=a_i(1-p_i)+b_ip_ifi​=ai​(1−pi​)+bi​pi​,由于此时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相关推荐

  1. 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 ...

  2. A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析)

    A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析),本文转载竞赛赛题.评阅要点,进行赛题解读和分析. 评阅要点为竞赛组委会官方公布,完整体现了解题思路. 本文首发于 ...

  3. A4.2021年全国数学建模竞赛A题-赛题分析与评阅要点(FAST主动反射面的形状调节)

    Python小白的数学建模课-A4.2021年全国数学建模竞赛A题(FAST主动反射面的形状调节),本文转载竞赛赛题.评阅要点,进行赛题解读和分析. 评阅要点为竞赛组委会官方公布,完整体现了解题思路. ...

  4. 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)

    2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...

  5. 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】

    偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB  写的 ===2018.9.6=== 这一次算理解深一点了 ...

  6. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  7. 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议

    今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...

  8. 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏

    第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. ​ 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...

  9. [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)

    4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 629  Solved: 371 [Submit][Stat ...

最新文章

  1. html 11 内联(行内)
  2. NIPS2020 | DiffGCN:利用微分算子和代数多重网格池化优化图卷积
  3. css 宽高自适应的div 元素 如何居中 垂直居中
  4. 动态规划之两个字符串的最大子序列
  5. 锐捷发布极简以太全光解决方案 打造“不一样”的全光网
  6. 计算机辅助初中英语教学,初中英语CAI课件制作初探
  7. openresty总结
  8. mysql远程登录备份_mysql实现自动远程备份一办法(转)
  9. Delphi创建对象时,Application、Self、nil三者的区别
  10. LaTeX实战经验:如何插入程序代码
  11. java中图片排版_基于Java的图像排版系统的设计.pdf
  12. 国内最新语音服务器,语音聊天社交很热门,带你搭建自己的语音聊天服务器
  13. 吐血整理C++书单,萌新到大牛,要看哪些书?
  14. unbuntu20.0.4 显卡驱动安装,nividia-smi无效
  15. 学习python-day01-13---转自Python分布式爬虫打造搜索引擎Scrapy精讲
  16. 什么是固态硬盘及其优缺点【转】
  17. Spring-Cache
  18. 关于汇编语言中的转移指令原理——offset
  19. 如何去除PDF中的水印,PDF去水印方法
  20. 近红外光谱预处理方法

热门文章

  1. 5G 和 WiFi-6,谁是智能制造的主角?
  2. coreldraw带圈字符_coreldraw中如何使字体围绕一个圆形排列?
  3. 快速连接github(修改hosts文件)
  4. H5之外部浏览器访问微信客户端网页
  5. Kubernetes控制平面组件:Controller-Manager控制器管理
  6. MySQL查询报错Unknown column ‘new_edition‘ in ‘IN/ALL/ANY subquery‘
  7. 【新书推荐】崛起的超级智能:互联网大脑如何影响科技未来
  8. android 显示表情符号,在Android中显示表情符号
  9. 2017.7.10 noi2008 假面舞会
  10. ES6对数组进行正序和倒序排列