淘汰赛制

递推

【问题描述】

淘汰赛制是一种极其残酷的比赛制度。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. hdu 1879 继续畅通工程(最小生成树,基础)

    题目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<algo ...

  2. java基础知识回顾之java Thread类学习(八)--java.util.concurrent.locks(JDK1.5)与synchronized异同讲解

    看API文档介绍几个方法:  JDK1.5中提供了多线程的升级解决方案: 特点: 1.将同步synchronized显示的替换成Lock                    2.接口Conditio ...

  3. POJ1013Counterfeit Dollar

    这个题主要是判断硬币真假,可能轻可能重,称三次,要输出哪枚是假币,还要输出是重的还是轻的,所以最主要的是标记变量 #include<cstdio> #include<cstring& ...

  4. Java 连接SQLite数据库

    下载jar包: http://www.sqlite.com.cn/Upfiles/source/sqlitejdbc-v033-nested.tgz public class TestSQLite { ...

  5. GIT权威手册及常用命令用法

    http://git-scm.com/book/zh Git Stash用法 http://www.cppblog.com/deercoder/archive/2011/11/13/160007.ht ...

  6. HTML5入门4---HTML5 与 HTML4 同一网页的不同写法

    HTML4写法 css: body { font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana ...

  7. Google不做坏事吗?

    说中国足球为什么冲不出亚洲,那是因为咱中国人太文气,足球是种“斗牛士”式的游戏,得玩的有点儿“野蛮”色彩.记得以前在英国的时候,遇上联赛,晚上大街小巷全民皆兵,曼切斯特队的粉丝在街道一边酒吧里,利物浦 ...

  8. Linux功能-RPM命令详解

    一.概述 RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”,用RPM包方式来发布软件变得越来越流行,主要的原因是这种软件发布 ...

  9. 【Spring】关于Boot应用中集成Spring Security你必须了解的那些事

    Spring Security Spring Security是Spring社区的一个顶级项目,也是Spring Boot官方推荐使用的Security框架.除了常规的Authentication和A ...

  10. Linux 删除文件夹和创建文件的命令

    删除文件夹实例:rm -rf /var/log/httpd/access将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 删除文件使用实例: rm -f /var/log ...