02day1
淘汰赛制
递推
【问题描述】
淘汰赛制是一种极其残酷的比赛制度。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的更多相关文章
- 二模02day1解题报告
T1.淘汰赛制 比赛时的淘汰赛制,给出每两个球队比赛的胜率,求出最终胜率最高的队伍. 这题的概率真的很难算啊感觉...一开始打的代码打下来就是用f[i][j]表示i场比赛后第j人还在场的概率.不难看出 ...
- 2模02day1题解
源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...
随机推荐
- C && C++ 内存分配示意图
<Unix环境系统高级编程>中的C语言内存分布示意图 1.C内存分布 BSS段: 用来存放程序中未初始化的全局变量.BSS是英文Block Started by Symbol的简称.BSS ...
- 【锋利的JQuery-学习笔记】Tab选项卡的实现
效果图: 关键点: 1.标签和标签内容都是用<ul><li>实现的,主要是通过Css样式设计成选项卡的模样. 2.用js代码实现点击标签时,标签内容的切换(做法是<div ...
- 【Unity3D】iOS 推送实现
原地址:http://www.iappfan.com/%E3%80%90unity3d%E3%80%91ios-%E6%8E%A8%E9%80%81%E5%AE%9E%E7%8E%B0/ #impor ...
- Apache Ignite——新一代数据库缓存系统
[编者按]飞速增长的数据需要大量存储,对这些数据的管理也不是一件容易的事.但相比于存储和管理,如何处理数据才是开发人员真正的挑战.对于TB级别数据的存储和处理通常会让开发人员陷入速度.可扩展性和开销的 ...
- 初学tornado之MVC版helloworld
作者:the5fire | 标签: MVC tornado | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...
- Binary Search Tree In-Order Traversal Iterative Solution
Given a binary search tree, print the elements in-order iteratively without using recursion. Note:Be ...
- Java程序员学C#基本语法两个小时搞定(对比学习)
对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...
- hadoop集群基本配置
最近在学习hadoop.网上具体过程很多,我就说说简单过程和注意问题. 环境:宿主机(windows64),虚拟机(centos64). 准备软件: 1.Vmware——虚拟机 2.centos镜像文 ...
- java代码实现自动登录功能
通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下 登录页面:login.jsp & ...
- Shell脚本的编写
筛选后统计总数 cat logs | grep IconsendRedirect | wc -l >> bb.log 筛选后分类统计并且排序 cat logs | grep Iconsen ...