【NOIP2016提高A组模拟7.17】锦标赛
来源:互联网 发布:流程的再造与优化 编辑:程序博客网 时间:2024/05/01 04:19
Description
403机房最近决定举行一场锦标赛。锦标赛共有N个人参加,共进行N-1轮。第一轮随机挑选两名选手进行决斗,胜者进入下一轮的比赛,第二轮到第N-1轮再每轮随机挑选1名选手与上一轮胜利的选手决斗,最后只剩一轮选手。第i名选手与第j名选手决斗,第i名选手胜利的概率是a[i][j].
作为一号选手的富榄(%%%%%%%)想知道如何安排每轮出场的选手可以使得他获胜的概率最大,并求出这个最大概率。
Input
第一个一个整数N,表示参赛人数。
接下来N行,每行N个小数表示a[i][j]
保证满足a[i][i]=0,a[i][j]+a[j][i]=1;
Output
一个小数,表示最大概率。与答案误差不超过10^(-5) 即算正确。
Sample Input
3
0.0 0.5 0.8
0.5 0.0 0.4
0.2 0.6 0.0
Sample Output
0.6800000
样例解释
第一轮2与3决斗,胜者与1决斗
如果2获胜,那么最后1获胜的概率为a[2][3]*a[1][2]=0.2
如果3获胜,那么最后1获胜的概率为a[3][2]*a[1][3]=0.48
所以总概率为0.68
Data Constraint
对于30%的数据,N<=10
对于60%的数据,N<=15
对于100%的数据,N<=18
Solution
这道题还是很靠谱的,因为403真的也就18个人
状压明显
但是,我在比赛时打了两个小时的顺推都推不出来因为它既有加又有去max,打到程序里有错,答案甚至输出到几万
然而,这题可以反着推
设1为这个人还活着,0为被揍死了
s为状态,凡是我后面在s上的加减都是状态的加减,即
a[i,j]为输入的赢得概率
首先看看顺推是怎么退的
现在倒推
为什么呢?
预处理
接着富榄不停的挑战别人活别人与别人互相挑战使越来越多的人复活
到最后,答案就是
即从随便一个人中选一个最大的。
另外,一定要注意
Code
#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define wengwentao 1using namespace std;int n,d[3000000][2];double a[20][20],f[262144][20],whocanbeatfulan=0.0;bool bz[262144][20];int main(){ scanf("%d",&n); fo(i,1,n) fo(j,1,n) scanf("%lf",&a[i][j]); f[1][wengwentao]=1; fo(s,1,(1<<n)-1) { fo(i,1,n) if(((1<<(i-1))&s)>0) { fo(j,1,n) if(((1<<(j-1))&s)>0) { f[s][i]=max(f[s][i],f[s-(1<<(j-1))][i]*a[i][j]+f[s-(1<<(i-1))][j]*a[j][i]); } } } fo(i,1,n) whocanbeatfulan=max(whocanbeatfulan,f[(1<<n)-1][i]); printf("%.7lf",whocanbeatfulan);}
1 1
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【NOIP2016提高A组模拟7.17】锦标赛
- 锦标赛【NOIP2016提高A组模拟7.17】
- 【NOIP2016提高A组模拟7.17】寻找
- 【NOIP2016提高A组模拟7.17】寻找
- 寻找【NOIP2016提高A组模拟7.17】
- JZOJ 4647 寻找 【NOIP2016提高A组模拟7.17】
- [2016JZSC]【NOIP2016提高A组模拟7.17】总结
- 【NOIP2016提高A组模拟7.15】立方体
- 计数【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.15】修路
- 【NOIP2016提高A组模拟7.15】计数
- 【NOIP2016提高A组模拟8.14】传送带
- 【NOIP2016提高A组模拟8.14】传送带
- 传送带【NOIP2016提高A组模拟8.14】
- 【NOIP2016提高A组模拟8.15】Password
- 【NOIP2016提高A组模拟8.15】Password
- office文件图标显示不正常
- Activity设置成Dialog模式
- 单调栈1001 POJ2796 Feel Good
- ListView嵌入ScrollView问题解决大全
- Minimal Steiner Tree(MST)
- 【NOIP2016提高A组模拟7.17】锦标赛
- 拉塞尔·威斯布鲁克:不知疲倦的“铁人”
- 单调栈1002 POJ 2559 Largest Rectangle in a Histogram
- 正则表达式_鸟叔学习笔记
- linux查看文件/目录 大小(du)、权限(ls ll),用户及组(user/group)增、删、改 (chmod/chown/chgrp)
- 数据结构(8) 构造数组的MaxTree
- ios 谓词
- 211. Add and Search Word - Data structure design
- pom.xml简介