淘汰赛制

递推

【问题描述】

淘汰赛制是一种极其残酷的比赛制度。2^n名选手分别标号1,2,3,…,2^n-1,2^n,他们将要参加n轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第3位与第4位比赛,第5位与第6位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)。这样,每轮将淘汰一半的选手。n轮过后,只剩下一名选手,该选手即为最终的冠军。

现在已知每位选手分别与其他选手比赛获胜的概率,请你预测一下谁夺冠的概率最大。

【输入】

第一行是一个整数n(l≤n≤l0),表示总轮数。接下来2^n行,每行2^n个整数,第i行第j个是pij(0≤pij≤100,pii=0,pij+pji=100),表示第i号选手与第j号选手比赛获胜的概率。

【解题过程】

首先要搞清楚一个问题:如何计算某个人在某一轮的获胜概率?每个人的对手是谁有很多种可能,一开始我以为是取所有中的最大,但其实是加起来,所以后来 WA 了很久。

然后很明显是递推。我自己用了一个很无脑的递推:用 f(k, i, j) 表示“在第 k 轮 i 与 j 比赛并胜出”的概率,则

f(k, i, j) = sum{ sum{f(k-1, i, x)}*sum{f(k-1, j, y}*p(i, j) }

边界状态 f(1, i, j) = p(i, j)

这个算法复杂度相当高,大约是 O(n*(2^n)^4)。

可以看出上面的每次递推都要求和,那么干脆保存和吧。所以用 f(k, i) 表示“在第 k 轮 i 胜出”的概率,则

f(k, i) = sum{ f(k-1, j)*f(k-1, i)*p(i, j) }

边界状态 f(0, i) = 1

初始得分 20 分。

种树

贪心或差分约束

【问题描述】

一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号为l…n。每个块的大小为一个单位尺寸并最多可种一棵树。每个居民想在门前种些树并指定了三个号码b,e,t。这三个数表示该居民想在b 和e 之间最少种t 棵树。当然,b≤e,居民必须保证在指定地区不能种多于地区被分割成块数的树,即要求t≤e-b+1,允许居民想种树的各自区域可以交叉。出于资金短缺的原因,环保部门请你求出能够满足所有居民的要求,需要种树的最少数量。

【输入】

第一行为n,表示区域的个数;第二行为h,表示房子的数目;下面h 行描述居民的需要:b,e,t(0<b≤e≤30000,r≤e-b+l)分别用一个空格分开。

【解题过程】

很明显的贪心,先对区间按照右端点的大小升序排序,然后每次从区间的最右边往左覆盖即可,这样就能保证“共用”的树最多,总数最少。

初始得分 10 分,因为把排序方式搞成了按照左端点排序。

软件开发

二分答案+动态规划

【问题描述】

一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m 个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。

【输入】

输入文件第一行包含两个由空格隔开的整数n和m,其中1≤n≤100,1≤m≤100。接下来的n行每行包含两个用空格隔开的整数d1和d2,d1表示该技术人员完成第一个软件中的一个模块所需的天数,d2表示该技术人员完成第二个软件中的一个模块所需的天数,其中l≤d1,d2≤100。

【解题过程】

一开始没有任何思路。

然后经过分析可以知道,只需要关心每个人各完成了软件 1 和 2 的多少模块即可。

然后想到二分答案,那么如何判断在某个时间内能否完成所有任务呢?

这里想到 HNOI’99 的快餐问题,然后就发现状态的表示什么的都几乎一样:用 f(i, j) 表示在某规定的时间内,前 i 个人一共完成 j 个软件 1 的模块之后最多能完成多少个软件 2 的模块,那么对第 i 个人完成了多少软件 1 的模块进行枚举即可。

假设规定的时间为 k,那么

f(i, j) = max{ f(i-1, j-x)+(k-x*cost1[i])/cost2[i] }

其中 x 表示第 i 个人完成的软件 1 的模块数。

然后就可以二分答案了。

初始得分 100 分。

02day1的更多相关文章

  1. 二模02day1解题报告

    T1.淘汰赛制 比赛时的淘汰赛制,给出每两个球队比赛的胜率,求出最终胜率最高的队伍. 这题的概率真的很难算啊感觉...一开始打的代码打下来就是用f[i][j]表示i场比赛后第j人还在场的概率.不难看出 ...

  2. 2模02day1题解

    源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...

随机推荐

  1. table 与 div 固定宽高问题

    div {width:100px;height:200px;word-wrap: break-word;overflow:hidden;} 这个可以固定div的宽高,溢出内容会被剪除. table{t ...

  2. 0327定时执行--存储过程--dbms_job--dbms_scheduler.create_job

    --oracle job 定时执行 存储过程 --建一张测试表 create table Person( name ), sex ) ); / --创建测试的存储过程 create or replac ...

  3. JavaScript高级---桥模式设计

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  4. hdu 2940

    简单的大数乘法,直接改16进制~~ #include <cstdio> #include <cstdlib> #include <cmath> #include & ...

  5. ural 1864

    题意描述不清   而且还卡精度 ~~ #include <cstdio> #include <cstring> #include <iostream> using ...

  6. uLua 学习笔记 之一 lua脚本 打包与读取

    最近要学习热更新,搜了下,选择了ulua这个插件,本人也是新人.对这个插件也是一知半解,不过幸好加了专门讨论这一块的群,这个群的技术氛围还是很浓重的,特别是已经形成了一套自己的lua学习框架.最近周末 ...

  7. Python Requests模块讲解4

    高级用法 会话对象 请求与响应对象 Prepared Requests SSL证书验证 响应体内容工作流 保持活动状态(持久连接) 流式上传 块编码请求 POST Multiple Multipart ...

  8. Class Object

    java.lang Class Object java.lang.Object public class Object Class Object is the root of the class hi ...

  9. hdu 2102 A计划(BFS,基础)

    题目 //要仔细写的BFS,着重对#穿越的处理哦: //花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些: //代码有点乱,但我不想改了,,,,, #include& ...

  10. Perl 三种时间time,localtime,gmttime

    #!/usr/bin/perl use warnings; use diagnostics; use strict; use POSIX; print "time: ", time ...