[BZOJ 4117] Weather Report
Link:
Solution:
第一次写$Huffman Tree$相关,发现就是个合并果子?
此题可以将每一种情况的概率和排列总数算出,接下来就是按照$Haffman Tree$基本构造方式操作了
注意,这里使用了分治的思想:
(1)如果排列总数大于1,先排除奇数影响,再将$P(pro,num)$变为$P(pro*2,num/2)$,
相当于将排列拆成相等的两部分再合并到一起
(2)如果排列总数等于1,再取下一个 概率最小的方式中的一个排列 合并即可
这样将排列方式不断减半、到一再合并的方法方便了概率的叠加
(Question:存疑点,为什么不能按照$pro*num$从小到大排序直接进行合并呢?)
Code:
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
typedef pair<double,ll> P;
#define X first
#define Y second
const int MAXN=;
int n;ll c[MAXN][MAXN];
double A,B,C,D,pa[MAXN],pb[MAXN],pc[MAXN],pd[MAXN],res;
priority_queue<P,vector<P>,greater<P> > q; int main()
{
c[][]=;
for(int i=;i<=;i++)
{
c[i][]=;
for(int j=;j<=;j++)
c[i][j]=c[i-][j]+c[i-][j-];
} scanf("%d%lf%lf%lf%lf",&n,&A,&B,&C,&D);
pa[]=pb[]=pc[]=pd[]=1.0; //预处理
for(int i=;i<=n;i++)
pa[i]=pa[i-]*A,pb[i]=pb[i-]*B,pc[i]=pc[i-]*C,pd[i]=pd[i-]*D;
for(int i=;i<=n;i++) for(int j=;j<=n;j++)
for(int k=;k<=n;k++) for(int l=;l<=n;l++)
if(i+j+k+l==n) q.push(P(pa[i]*pb[j]*pc[k]*pd[l],c[n][i]*c[n-i][j]*c[n-i-j][k])); while(true)
{
P cur=q.top();q.pop();
if(q.empty() && cur.Y==) break;
if (cur.Y>) //拆分+合并
{
if(cur.Y&) q.push(P(cur.X,)),cur.Y--;
res+=cur.X*cur.Y;
q.push(P(cur.X*,cur.Y>>));
}
else //合并
{
P t=q.top();q.pop();
res+=cur.X+t.X;
q.push(P(cur.X+t.X,));
if(t.Y>) q.push(P(t.X,t.Y-));
}
}
printf("%.6f",res);
return ;
}
[BZOJ 4117] Weather Report的更多相关文章
- BZOJ4117 : [Wf2015]Weather Report
一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可. 每次取出概率最小的,将它个数除以2,对于零头需要特判. #include<cstdio> ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- (转) Artificial intelligence, revealed
Artificial intelligence, revealed Yann LeCunJoaquin Quiñonero Candela It's 8:00 am on a Tuesday morn ...
- 浅谈Excel开发:七 Excel 自定义任务窗体
前面花了三篇文章讲解了Excel中的UDF函数,RTD函数和异步UDF函数,这些都是Excel开发中的重中之重.本文现在开始接着第二篇文章的菜单系统开始讲解Excel中可供开发的界面元素,本文要讲解的 ...
- 在Gradle中使用jaxb的xjc插件
jaxb,全称为Java Architecture for Xml Binding,是一种将java对象与xml建立起映射的技术.其主要提供两个功能,一是将java对象映射为xml,二是将xml映射为 ...
- java 调用webservice接口
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...
- ZeroMQ 教程 001 : 基本概览
介绍性的话我这里就不翻译了, 总结起来就是zmq很cool, 你应该尝试一下. 如何安装与使用zmq 在Linux和Mac OS上, 请通过随机附带的包管理软件, 或者home brew安装zmq. ...
- https Java SSL Exception protocol_version
在java代码中,使用HttpClient爬取https页面时,遇到了这个bug:javax.net.ssl.SSLException: Received fatal alert: protocol_ ...
- 使用axis2的wsdl2java把wsdl生成java文件
原文地址:http://blog.csdn.net/walkcode/article/details/7661674 有时在我们的开发中可能会有这种情况就是你要使用webservice但是对方没有给你 ...
随机推荐
- MFC随机数
void CMFCDemoDlg::OnClickedGetrand() { wchar_t str[]; //srand((unsigned)time(NULL)); int num = rand( ...
- POJ2516:Minimum Cost(最小费用最大流)
Minimum Cost Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 19088 Accepted: 6740 题目链 ...
- Eclipse来push,fetch,rebase代码
如何与项目里的其他人一起合作项目,提交代码并更新呢?这里提出我比最近用到的两种工具:一种是Eclipse,另外一个是SourceTree.个人推荐从事Java开发的话,可以用Eclipse.当然,还有 ...
- 转载:Java中的String与常量池
转载自http://developer.51cto.com/art/201106/266454.htm.感觉总结的不错,自己收藏一下. string是java中的字符串.String类是不可变的,对S ...
- LOJ 6057 - [HNOI2016]序列 加强版再加强版
Description 给定一个长度为 \(n\le 3*10^6\) 的序列 \(q\le 10^7\) 次询问每次求区间 \([l,r]\) 的所有子区间的最小值的和 询问随机 Solution ...
- RGB颜色原理
参考:http://www.cnblogs.com/harrytian/archive/2012/12/12/2814210.html 工作中经常和颜色打交道,但却从来没有从原理上了解一下,这篇文章希 ...
- [bzoj1486][HNOI2009]最小圈——分数规划+spfa+负环
题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[ ...
- wget.vbs & wget.ps1
Wget-like tool for file transfer when do post exploitation. CODE echo strUrl = WScript.Arguments.Ite ...
- gdb 调试 ncurses 全过程:
转载地址: http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU ...
- 关于EINTR错误的理解【转】
转自:http://www.xuebuyuan.com/1470645.html 最近在工作中遇到了EINTR错误,感到比较困惑,几番研究之后,颇有心得和收获,特记录如下,便于以后查询,也给有同样困惑 ...