T1.淘汰赛制

比赛时的淘汰赛制,给出每两个球队比赛的胜率,求出最终胜率最高的队伍。

这题的概率真的很难算啊感觉。。。一开始打的代码打下来就是用f[i][j]表示i场比赛后第j人还在场的概率。不难看出这是一棵树形的状态树

那么可以看出,每次比较的区间长度是2n,那么可以通过枚举左端点来确定区间。确定区间后,f[i][j]=f[i-1][j]*sum(f[i-1][k]*a[j][k])

T2.种树(trees)

有长度为n的区间,有h个要求,每个要求为[b,e]内至少标记t个数,求最少标记数。

贪心吧。。。

一种做法是先把区间按e,b排序,然后先满足e小的需求,尽量往e靠,每次先计算此区间内已被标记的,然后标记未被标记的直到满足条件,最后扫一遍计算被标记的数;

另一种做法是类似的,每次标记后,搜索后面的区间,如果当前标记点在那个区间内,则减少那个区间的要求量,重复动作直到当前区间需求减少为0。每次检查新区间的时候就把要求量加入ans,最后输出ans即可。

由于第一个做法较简单,第二个较难描述,所以放一下第二种做法的代码。

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

struct request

{

         int b,e,t;

         bool operator < (const request &xx) const

         {

                   return e==xx.e?b<xx.b:e<xx.e;

         }

}q[];

int n,h;

int v[];

int main()

{

         freopen("trees.in","r",stdin);

         freopen("trees.out","w",stdout);

         cin >> n;

         cin >> h;

         for (int i=;i<=h;i++)

         {

                   cin >> q[i].b >> q[i].e >> q[i].t;

         }

         sort(q+,q+h+);

         int cnt=;

         for (int i=;i<=h;i++)

         {

                   if (q[i].t>)

                   {

                            int pos=q[i].e;

                            cnt+=q[i].t;

                            for (int j=;j<=q[i].t;j++)

                            {

                                     while (v[pos])

                                               pos--;

                                     v[pos]=;

                                     for (int k=i+;k<=h;k++)

                                               if (q[k].b<=pos&&pos<=q[k].e)

                                                        q[k].t--;

                            }

                   }       

         }

         cout << cnt << "\n";

}

T3.软件开发(software)

有两个项目各有m个步骤,由n个人来完成,每个人完成同一任务的一个步骤时间不变,求出完成的最少时间。(题目给出了每个人完成这两个任务的时间)

一看感觉题目有点熟悉,然后就开始dp。一开始的状态是f[i][j][k],表示前i个人完成第一个任务的j个步骤,第二个任务的k个步骤所需的最短时间。打了五重循环然后发现是错的,因为每个人的效率是不同的。所以没有交,换了一种打法。

先二分时间,然后就是判断这个时间下是否可行了。判断也是一个dp的过程,f[i][j]表示前i个人做了第一个任务的j个步骤时,还能做第二个任务的步骤数。f[i][j]=max(f[i][j],f[i-1][k]+(t-(j-k)*d1[i])/d2[i])

(d1[i],d2[i]分别表示第i个人做两个任务的一个步骤的时间)。如果最后f[n][m]>=m就表示可行。

如此就能AC了。

(但是第一遍为什么只有40分呢?这就和我当时处理f[1][j]的时候不谨慎有很大关系了,还有一处错就是我把j*d1[i]>t的情况全部舍去了,就把一些情况漏掉了。。。)

二模02day1解题报告的更多相关文章

  1. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  2. 二模14day1解题报告

    注:Index数☞由4,7组成的十进制数. T1.全排列(permutation) 求n个数的第k个排列中,有多少个Index位置上是Index数. 由于k的范围比较小,n的范围比较大(都是109), ...

  3. 二模12day2解题报告

    T1.笨笨玩糖果(sugar) 有n颗糖,两个人轮流取质数颗糖,先取不了的(0或1)为输,求先手能否必胜,能,输出最少几步肯定能赢:不能,输出-1. 一开始天真的写了一个dp,f[i]表示i颗糖最少取 ...

  4. 二模01day1解题报告

    T1.音量调节(changingsounds) 有n个物品的背包(有点不一样,每个物品必须取),给出初始价值,物品价值可正可负(就是两种选择嘛),求可能的最大价值,不可能(<0或>maxs ...

  5. 二模15day1解题报告

    T1.合并序列(minval) 给出长为 n的AB两个序列求两两相加中最小的n个. 据说有证明(在蓝书上,优先队列部分)先把A[1~n]+b[1]入队,然后每取一个a[x]+b[y]就把a[x]+b[ ...

  6. 二模14day2解题报告

    T1.砍树(cuttree) 给出n棵树,要锯下m米木材,现在有一个高度h,h以上所有木头都砍下来,求满足m米的最小h 很简单的二分答案判断可行性. T2.快速求和(quicksum) 给出数字串s, ...

  7. 二模12day1解题报告

    T1.笨笨与电影票(ticket) 有n个1和m个0,求每个数前1的个数都大于等于0的个数的排列数. 非常坑的一道题,推导过程很烦.首先求出所有排列数是 C(n+m,m),然后算不合法的个数. 假设存 ...

  8. 二模07day1解题报告

    T1.种树(tree) 有n棵树,各有高度,要求每棵树的高度都小于它到其他树的距离(可能种一起).求砍掉的总高度是多少. Ok,那么可以想到,只要满足每棵树和最近的树满足条件就可以保证和其他树满足了. ...

  9. 二模07day2解题报告

    T1.采药(medic) 有n个草药,要在m的时间内获得最大价值. 乍一看像是01背包,然而数据只能过50分. 考虑数据范围,t<=10,w<=10,所以只有121种草药.考虑多重背包的二 ...

随机推荐

  1. Python开发入门与实战3-Django动态页面

    3.Django动态页面 上一章节我们实现的helloworld视图是用来演示Django网页是创建的,它不是一个动态网页,每次运行/helloworld/,我们都将看到相同的内容,它类似一个静态HT ...

  2. Android 计算器UI-TableLayout

    表格布局(TableLayout) <?xml version="1.0" encoding="utf-8"?> <TableLayout x ...

  3. hadoop map-red的执行过程

    hadoop的 map-red就是一个并行计算平台,我们在使用这个平台的时候,要做的事情就是提交自己定制的任务(job,主要定制map类,reduce类,combine类等类),然后设置job的各种参 ...

  4. 同域名下PC与移动端自动识别跳转

    输入相同域名,在pc端和移动端会出现不同的页面效果,一种是用栅格系统实现自适应,更多的是设计两套不同的模板和两个二级域名或者一个主域名和一个二级域名(就是有区别就可以了); js代码判断浏览器的用户代 ...

  5. HDU 4777 Rabbit Kingdom (2013杭州赛区1008题,预处理,树状数组)

    Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. 在maven项目中解决第三方jar包依赖的问题

    在maven项目中,对于那些在maven仓库中不存在的第三方jar,依赖解决通常有如下解决方法: 方法1:直接将jar包拷贝到项目指定目录下,然后在pom文件中指定依赖类型为system,如: < ...

  7. 关于js判断鼠标移入元素的方向--解释

    一开始我是这么想的,将待移入的元素分割四块,用mousemove获取第一次鼠标落入的区域来判断鼠标是从哪个方向进去的. 所以只要写个算法来判断鼠标的值落入该元素的区域就可以得出鼠标移入的方向,如下图: ...

  8. Linux集群及LVS简介

    一.什么是集群 通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的 ...

  9. linux下压缩与解压(zip、unzip、tar)详解

    linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...

  10. 1、C#入门第一课

    C# 读作C Sharp,所以程序文件的扩展名为.cs 新建项目-窗体应用程序 所谓的Visual C#就是指的可视化编程,主要在设计窗口布置好自己的控件(一些具有一定功能的小部件,例如如可以点击的按 ...