link

$solution:$

朴素 $dp$,暴力枚举选择 $i$ 号人的第 $j$ 张卡片,朴素 $dp$ 即可,时间复杂度 $O(n^4)$ 。

考虑对于朴素 $dp$ 的优化,发现其实是一个背包卷积的过程,考虑按 $A$ 值从大到小依次加入,每次维护新的 $P$ 值可以做到 $O(1)$ 。

设计生成函数 $F(x)$ 表示将 $1-n$ 的所有多项式卷在一起的答案,每次只要维护多项式除法与乘法即可,而对于每个多项式都是形如 $ax+b$ 的形式,所以直接暴力维护即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define mod 1000000007
#define int long long
using namespace std;
inline int read(){
int f=,ans=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
const int MAXN=;
struct node{
int val,id,res,p;
}g[MAXN*MAXN];
inline int ksm(int a,int b){
int ans=;
while(b){
if(b&) ans*=a,ans%=mod;
a*=a,a%=mod;
b>>=;
}return ans;
}
int n,tot,F[MAXN],G[MAXN],p[MAXN];
inline void mul(int x1,int x0){
if(!x1) return;
for(int i=;i<=n;i++) G[i]+=F[i]*x0,G[i]%=mod,G[i+]+=F[i]*x1,G[i+]%=mod;
for(int i=;i<=n;i++) F[i]=G[i];memset(G,,sizeof(G));return;
}
int Mod(int x){return ((x%mod)+mod)%mod;}
inline void Div(int x1,int x0){
if(!x1) return;int Inv=ksm(x1,mod-);
for(int i=n-;i>=;i--) G[i]=(Inv*F[i+])%mod,F[i]=Mod(F[i]-x0*G[i]);
for(int i=;i<=n;i++) F[i]=G[i];memset(G,,sizeof(G));return;
return;
}
bool cmp(node x1,node x2){return x1.val>x2.val;}
int P[MAXN],Ans[MAXN],v[MAXN];
signed main(){
// freopen("51nod_1850_11_in.txt","r",stdin);
n=read();int inv100=ksm(,mod-);
for(int i=;i<=n;i++){
int num=read();
int sum=;
int L=++tot,R=;
for(int j=;j<=num;j++){
g[++tot].id=i;
g[tot].val=read(),g[tot].res=((-read())*inv100)%mod,g[tot].p=read();
sum+=g[tot].p;
R=tot;
}
for(int j=L;j<=R;j++) g[j].p=(g[j].p*ksm(sum,mod-))%mod;
}
for(int i=;i<=n;i++) v[i]=read();
F[]=;
sort(g+,g+tot+,cmp);
for(int i=;i<=tot;i++){
int id=g[i].id;
Div(P[id],Mod(-P[id]));
P[id]+=g[i].p,P[id]=Mod(P[id]);P[id]=Mod(P[id]);
for(int k=;k<n;k++) Ans[id]+=Mod(Mod(Mod(F[k]*v[k+])*g[i].res)*g[i].p),Ans[id]=Mod(Ans[id]);
mul(P[id],Mod(-P[id]));
}
for(int i=;i<=n;i++) printf("%d\n",Ans[i]);return ;
}

[51Nod1850] 抽卡大赛的更多相关文章

  1. 51nod 抽卡大赛

    抽卡大赛 链接 分析: $O(n^4)$的做法比较好想,枚举第i个人选第j个,然后背包一下,求出有k个比他大的概率. 优化: 第i个人,选择一张卡片,第j个人选的卡片大于第i个人的概率是$p_j$,那 ...

  2. 十二省NOI“省选”联考模测(第二场)A抽卡大赛

    /* dp维护整体的概率, 每次相当于回退一格然后重新dp一格 */ #include<cstdio> #include<algorithm> #include<iost ...

  3. 51nod 1850 抽卡大赛 (十二省联考模测) DP

    O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...

  4. 三色抽卡游戏 博弈论nim

    你的对手太坏了!在每年的年度三色抽卡游戏锦标赛上,你的对手总是能打败你,他的秘诀是什么? 在每局三色抽卡游戏中,有n个卡组,每个卡组里所有卡片的颜色都相同,且颜色只会是红(R).绿(G).蓝(B)中的 ...

  5. [CSP-S模拟测试]:抽卡(概率DP)

    题目描述 水上由岐最近在肝手游,游戏里有一个氪金抽卡的活动.有$n$种卡,每种卡有 3 种颜色.每次抽卡可能什么也抽不到,也可能抽到一张卡.每氪金一次可以连抽 m 次卡,其中前$m−1$次抽到第$i$ ...

  6. Java实现 蓝桥杯 算法提高 抽卡游戏

    试题 算法提高 抽卡游戏 某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个"井"的机制,抽满k次卡后直接送这张限定卡.试求获得这张限定卡需要的期望抽卡次数.输入为一行,用空格隔开 ...

  7. [loj3315]抽卡

    令$S$表示对于某一种抽卡顺序中某一段长度为$k$的段全部被抽到的时间(这里没有期望)所构成的集合,根据$min-max$容斥的公式,有$E(\min(S))=\sum_{T\subseteq S}( ...

  8. 51nod 省选联测 R2

    51nod 省选联测 R2 上场的题我到现在一道都没A,等哪天改完了再写题解吧,现在直接写第二场的. 第二场比第一场简单很多(然而这并不妨碍我不会做). A.抽卡大赛:http://www.51nod ...

  9. C#入门经典第十章例题 - - 卡牌

    1.库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

随机推荐

  1. node.js入门学习(四)--Demo图书的增删改查

    需求:图书的增删改查,图书数据保存在data.json文件中. 1.Demo结构: 2.首先下载安装node.js,配置环境变量:参考博客 3.项目初始化 1)创建项目根目录node-hello,进入 ...

  2. 数据:ContentResolver类

    ContentResolver是通过URI来查询ContentProvider中提供的数据.除了URI以 外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型.   如果你需要获取一个特定的记 ...

  3. macOS 更新 git 命令提示 xcrun,.gitignore 配置不生效问题。

    macOS 更新 运行git提示xcrun: error: invalid active developer path 在终端输入 xcode-select --install 即可以解决该问题 .g ...

  4. nmon性能监控

    1.nmon下载地址 2../nmon_x86_rhel52 3.根据上面提示的快捷键进行输入即可显示相应的资源耗用情况,如输入:c.m.d(显示cpu.内存.磁盘使用情况) 4.输入数据到文件 ./ ...

  5. LBS 基于位置的服务

    LBS (Location Based Services)基于位置的服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位 ...

  6. [CSP-S模拟测试]:格式化(贪心)

    题目传送门(内部题105) 输入格式 每组数据第一行一个正整数$n$,表示硬盘块数,接下来$n$行,每行两个正整数,第一个正整数为硬盘格式化前的容量,第二个正整数为格式化之后的容量. 输出格式 对每组 ...

  7. 不属于java语言鲁棒性特点的是

      A:java能检查程序在编译和运行时的错误 B:java能运行虚拟机实现跨平台 C:java自己操纵内存减少了内存出错的可能性 D:java还实现了真数组,避免了覆盖数据的可能 鲁棒性(Robus ...

  8. 接入集团auth流程

    前言 一直对集团的auth系统很感兴趣,所以这次记录下接入集团auth的流程.如果后期有时间,会补充具体的auth实现细节. 正文 一.实现思想 1. 实现思想 明确几个名词:接入方,管理方.接入方指 ...

  9. 教你用Python实现简单监督学习算法

    教你用Python实现简单监督学习算法 监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段.即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥匙. 这篇监督学习教程 ...

  10. DOM4J解析文件

    转发一篇好文 DOM4J解析文件 Dom4j和Xpath