POJ3071(Football)–概率DP

题意:有(1<

en….网上当然也后不少解题报告,但是很多直接给出状态转移方程和贴出代码,而少了其中重要的推断过程,我觉得不是很好。所以自己给写一个较为详细的过程

首先呢,以n==3为例子,即8支队伍参赛。一种比赛情形是这样的

由图可知,在题中给定n后,需要比赛n轮即可知道冠军队伍是谁,我这里多了个第0轮是为了后面计算需要

其次,对于DP的题目,我们 首先要明确状态转移方程代表的含义是什么,我们 已知什么,未知什么,怎么去确定合适的方程,这些是很重要的,当然,推出转移方程到后面更难的题目则是更重要的。

既然要求出最终能获胜的队伍,即 求出每个队伍的在最后一轮的胜率,最后取一个最大值就ok了。并且,获得 冠军的那支队伍既然能够到达最后一轮,那么,它一定经历了所有轮次的比赛,并且都赢了。在这每一轮比赛的胜率,就是子问题了。这是很简单就可以得出的。所以, 后一轮的胜率,肯定是由上一轮的胜率决定的。

所以, DP[i][j]可以这么定义,它表示为在第i轮中,第j只队伍的胜率。这也符合求解问题的逻辑,我们已知总共的 轮数(n),已知所有 队伍的数量(1<

DP的含义确定了,那么,状态转移方程怎么来呢??

首先,dp数组的 第一维表示的是整个赛事的轮数,所以外面有一层循环,接着 ,第二维表示每只队伍,所以又一层循环遍历每一只队伍。那么对应的概率到底怎么来呢…..

因为对于树中的 每个结点代表对应DP[i][j]的概率,即两支队伍某一方击败另一方,并且,这两支队伍在上一轮中都双双各自获胜,我们 直接看最后一轮比赛/最上面一个结点,因为,所有底下结点是子问题,性质都一样,所以可以得到部分转移方程:(假设最后一轮是j赢了,此时i==3,概率为DP[i][j])

DP[i][j] = DP[i-1][j] * DP[i-1][k] * ???;

DP[I-1][j]:表示本轮的赢家j在上一轮获胜的概率,上一轮一定是获胜了的再能到这一轮

DP[i-1][k]:表示本轮赢家j遇见的对手k,k在上一轮获胜的概率,k也晋级到了这一轮

???:这个表示什么呢???因为此时DP[i][j]表示这一轮是j获胜的概率,所以j战胜了k,那么胜率是多少呢??

在题中输入的矩阵中 第j行k列就是这里的概率

所以完整的状态转移方程:(当前概率+=上一轮二者分别获胜的概率 * 这一轮一方胜另一方的概率)

别以为到这里就结束了,k 的范围还没确定呢!!

从图中可知,在第二轮中 3号结点不会遇见所有的对手只有可能遇见来自另一边的5,6,7,8的某一个

而1,2,4是不可能再遇见了(已经淘汰了)。那么,k的编号怎么判断呢??(关键)

假设最后是 j和k进行决赛,那么表明j和k一定是在最后一轮相遇了,在倒数第二轮它们不会相遇,因为它们各自再进行半决赛(好像说了句废话,但是….)k的范围就这样确定。

因为到了最后一轮,所以遍历轮数的编号i此时为3,如图中,j为3,最后是k==7与之对决。

它们满足这样了个关系:

3 /(1<

公式是这样的

即对于某个j,判断k是否能和j同时成为一个点的左右孩子结点。这个条件就满足了对可能遇见的对手的的选取

这里还是要稍微思考下的。

Original: https://www.cnblogs.com/ygsworld/p/11312218.html
Author: 回忆酿的甜
Title: POJ3071(Football)–概率DP

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582138/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL提示sql_mode=only_full_group_by解决办法

    MySQL异常sql_mode=only_full_group_by 原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mo…

    Linux 2023年6月13日
    0129
  • centos系统和Ubuntu系统命令区别以及常见操作

    一.前言 二.系统环境 三.命令区别 3.1 使用习惯和命令区别 3.2 服务管理的区别 3.3 软件包信息区别 四.Ubuntu系统常见操作 4.1 Ubuntu系统apt和ap…

    Linux 2023年6月7日
    0233
  • [20220304]使用gdb完成各种进制转换.txt

    [20220304]使用gdb完成各种进制转换.txt –//一般使用gdb调试跟踪程序,centos 7以上版本gdb支持管道,可以使用gdb p命令实现10,16进…

    Linux 2023年5月27日
    094
  • Optional 常用方法总结

    转载请注明出处: Optional 类是 JAVA 8 提供的判断程序是否为空提供的包装工具类;可以减少代码中的 是否为空的判断,以及减少 NullPointerException…

    Linux 2023年6月14日
    0123
  • Linux内核模块管理(命令)

    1.什么是 Linux 内核模块? 内核模块是可以根据需要加载到内核中或从内核中卸载的代码块,因此无需重启就可以扩展内核的功能。事实上,除非用户使用类似lsmod这样的命令来查询模…

    Linux 2023年6月8日
    099
  • 增加Apache响应时间

    在apache的配置文件 httpd.conf 最下面加上下面代码,增加响应时间 FcgidProcessLifeTime 8200 FcgidIOTimeout 8200 Fcg…

    Linux 2023年6月7日
    0102
  • 微步蜜罐部署

    1.下载安装包HFish-Windows-amd64 (Windows x86 架构 64 位系统),解压缩 下载地址反制溯源_欺骗防御_主动防御-HFish免费蜜罐平台 2.进入…

    Linux 2023年6月14日
    0101
  • VMware 和 Linux 的安装

    常见的虚拟机软件有 VMware Workstation(简称 VMware)、VirtualBox、Microsoft Virtual PC 等,本文以 VMware 为例来讲解…

    Linux 2023年5月27日
    090
  • linux下利用inode删除文件

    由于 linux下中文编码和在Windows中的中文编码可能不同,在一定的条件下,linux的文件夹可能会存在乱码的情况就算一些乱七八糟的字符。如问号的文件名,这样的文件使用rm …

    Linux 2023年6月6日
    0108
  • 如何隐藏shell脚本内容

    从事 Linux 开发的同学,经常需要编写 shell 脚本,有时脚本中会涉及到一些敏感内容,比如一些 IP 地址,用户名以及密码等,或者脚本中有一些关键的代码, 所有这些内容你都…

    Linux 2023年6月13日
    098
  • CentOS7 安装高版本gcc, g++, gfortran等工具

    SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为用户提供一种方便、安全地安装和使用应用程序和运行时环境的多…

    Linux 2023年6月7日
    087
  • 一文解读:CSS语法、注释、使用方式、选择器。

    写在开篇 html的内容,想要改变它的样式?比如颜色、字体、布局,等等,怎么破?CSS代码带你起飞! css语法 css的语法非常简单,如下: 选择器 {属性: 值;属性:值} 例…

    Linux 2023年6月7日
    078
  • Centos7 禁用IPV6地址的方法

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    090
  • Redis多线程原理详解

    从上图中可以看出只有以下3个地方用的是多线程,其他地方都是单线程: 1:接收请求参数 2:解析请求参数 3:请求响应,即将结果返回给client 很明显以上3点各个请求都是互相独立…

    Linux 2023年5月28日
    089
  • web安全之反向代理配置X-Frame-Options实现防盗链和防止点击劫持攻击

    介绍 http响应头安全策略,从http头文件的方面,利用参数设置开启浏览器的安全策略,来实现相关的安全机制 X-Frame-Options HTTP&#x54CD;&am…

    Linux 2023年6月6日
    0128
  • std::map自定义类型key

    故事背景:最近的需求需要把一个结构体struct作为map的key,时间time作为value,定义:std::map 技术调研:众所周知,map是STL库中常用的关联式容器,底层…

    Linux 2023年6月13日
    0135
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球