给最多10条链,每条链长度最大1000,链上每点有权值,每条链上按顺序,第i个点属于level[i],

链上后一个点可以选的前提是前面的点都选了。

选择了一些点可以得到的分数是两部分加起来:1、全部点权和 2、leveli的点共有yi个,若你选择了xi个,则得分:你选择的该层点权和*xi/yi

问所有可能的取值组合的分数期望。

题意太纠结了,读的好心塞,感觉思考能力都下降了。

因为题目是求期望,所以我们需要得到,1、总方案数,2、所有取法的得分和。

对于1,就是(每条链上点数+1)相乘-1就是了

对于问题2,

其中主要要解决得分规则2,由于总共最多10条链,对于每一个level i ,我们可以想到用二进制记录第i层状态,枚举第i层的取法,

这样我们的问题就变成了,我们要求每一种取法的得分数,以及在总方案数中,这种取法占了多少种。

这样还是比较好算的,假如第i层,有第1 3 4 6条链上可以取,你取了1 3上的第i个数,则第4 6条链最多取到第i-1个数,假设第1 3 4 6条链上总共分别有5 6 3 4个点,

那么取1 3的全部方案数就是   (5-1)×(6-3)×min(3,i)×min(4,i) 种,因为1 3链上必须取到第i个数,第i个后面的可选,而第4 6条链只能选前i-1个数,那么这样乘起来就是总方案数。

现在主要问题都解决了,我们就可以累加得分算出总得分,进而求期望了。

题目的wa点有:点从0开始记数,总方案数用int会爆,直接double就可以了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
const int maxn=10010;int vis[maxn],son[maxn],len[15],val[maxn],level[maxn],mk[maxn],list[15][1005];double cal(int a,int b)//a表示枚举到第alevel b的二进制位表示levela层可能取哪些链
{double n=1,sum=0;int cnt=0;for(int i=1;i<=10;i++,b>>=1){if(b&1){cnt++;n*=(len[i]-a);sum+=list[i][a];}elsen*=(min(len[i],a)+1);}return sum*((cnt>1?cnt:0)+level[a])/level[a]*n;
}int main()
{int icy,m,i,n,k,j,a,b;scanf("%d",&icy);while(icy--){scanf("%d%d",&n,&m);for(i=0;i<n;i++)//注意点是从0开始编号的!!!scanf("%lld",&val[i]);memset(son,-1,sizeof son);memset(vis,0,sizeof vis);while(m--){scanf("%d%d",&a,&b);son[a]=b;vis[b]=1;}//建图记录以下:int l=1;//求链的总数memset(mk,0,sizeof mk);//每个level出现在哪些链中memset(level,0,sizeof level);//level[i]的点数 //level总数:第一个level[k]==0的kmemset(list,0,sizeof list);//list[i][j]第i条链的第j位置的值memset(len,0,sizeof len);//每条链的长度double tot=1;//分母for(i=0;i<n;i++){if(!vis[i]){vis[i]=1;for(k=0,j=i;j!=-1;j=son[j],k++){list[l][k]=val[j];level[k]++;mk[k]+=(1<<(l-1));}len[l]=k;tot*=(k+1);l++;}}tot-=1;//分母double sum=0;for(i=0;level[i];i++)//枚举每一层levelfor(j=mk[i];j>0;j=(j-1)&mk[i])//枚举这一层取哪几条链上的所有可能sum+=cal(i,j);printf("%.3lf\n",sum/tot);}return 0;
}

hdu4921 Map相关推荐

  1. hdu4921 Map(状压统计)

    hdu4921 Map(状压统计) 题意:有10条长度不超过1000链,链上的节点有权值.我们从这些节点中选出一些节点来,若要选节点u,则u的前继都得被选进去.对于某一种选定的情况,我们能获得的权值为 ...

  2. Map的分类和不同的应用场景

    java为数据结构中的映射定义了一个接口java.util.Map; 它有四个实现类,分别是HashMap,Hashtable,LinkedHashMap和TreeMap 可能很多人只使用过HashM ...

  3. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解

    1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...

  4. Go 学习笔记(67)— Go 并发安全字典 sync.Map

    1. 并发不安全的 map Go 语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是 ...

  5. Python 常用内置函数map、zip、filter、reduce、enumerate

    Python 中有许多非常实用的内置函数,通过这些函数我们可以方便的实现某些功能,下面就列举一些常用的内置函数. 1. map() 函数 map() 可以根据提供的函数对指定序列做映射,它接受一个函数 ...

  6. 将request中的所有参数存放到自定义的map中

    /*** <获取参数map>* * @return 参数map* @throws Exception */protected Map<String, Object> getPa ...

  7. Map再整理,从底层源码探究HashMap

    前言 本文为对Map集合的再一次整理.内容包括:Map HashMap LinkedHashMap TreeHashMap HashTable ConcurrentHashMap Map Map< ...

  8. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

  9. 网络模型mAP计算实现代码

    网络模型mAP计算实现代码 一.mAP精度计算 这里首先介绍几个常见的模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是: 1)True posi ...

最新文章

  1. transition过渡规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。...
  2. arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题
  3. jrebel gradle_JRebel适用于Gradle Spring Boot应用程序
  4. python3.4安装pygame_python 3.4.3 安装pygame
  5. (19)Verilog HDL顺序块:begin-end
  6. PyTorch 成程序员“新宠”,TensorFlow 风光不再?
  7. 高通android7.0模块编译.ko
  8. mysql修改指定记录_sql操作之修改记录值
  9. Hbase学习(四)---hbase 的下载,maven依赖,以及官网文档
  10. 绕过TrustedInstaller权限
  11. 西直门立交桥的破事儿
  12. 神经网络建模的适用范围,神经网络建模步骤视频
  13. php禁用session和cookies,session与cookie的区别是什么?如果客户端禁用了cookie功能,将会对session有什么影响?...
  14. java抢微博福卡,敬业福终极攻略:一天拿20多张福卡,轻松集齐支付宝五福
  15. Unbuntu18.04系统定制化制作与再生龙镜像生成
  16. 二阶积分系统L1自适应控制器设计
  17. 阿里达摩院XR实验室2022校招内推
  18. 女程序员职业发展的特别之处
  19. PyQt5学习记录(2)---QMainWindow菜单栏、状态栏和工具栏
  20. Maya打造绝色东方含蓄美女详细教程,学会3D建模都能给自己做老婆了,你还在等什么呢?

热门文章

  1. BSN赋能浙江移动5G+区块链应用加速落地
  2. Error: Please renew the default configurations.
  3. 24设计模式—中介者模式(九耶-钛伦特)
  4. Linux环境下实现excel文件转pdf并且实现优化
  5. 泉此方的一天-万恶的作业(homework)
  6. 百度的司机,今天干了件轰动中外的大事
  7. 国庆去哪里玩比较好?
  8. linux回到桌面的命令符_Linux最常用命令及快捷键整理
  9. 考试管理系统/在线考试系统
  10. LVS负载均衡--NAT模式