icpc网络赛第二场K Meal

题意:

有n个人,n个菜,
现在n个人轮流吃菜,起初S中有n个菜,第i个人会在还没拿走的菜中随机选一个,拿走第j个菜的概率为ai,j∑k∈Sai,k\frac{a_{i,j}}{\sum_{k∈S}a_{i,k}}∑k∈S​ai,k​ai,j​​,然后将这个菜从集合S中删除,如果S为空则结束,否则轮到下一个继续拿菜
让你输出第i个人拿第j个菜的概率
n<=20 ,ai,ja_{i,j}ai,j​<=100

题解:

比赛时想好大体思路,好不容易把A写完,调了半天,最后没时间做K了
题意很好理解,对于不同的拿取方式,对于第i个人的情况是不同的,不难看出n很小才20,所以我们可以状压dp
我们枚举二进制,1表示这个菜被取了,0表示还未取
对于一个状态state,假设共cnt个位置为1,因为是顺序吃菜,所以就是求第cnt个人的吃菜概率,枚举其中为1的位置,相当于是吃的第j种菜
用f[i]表示当前这个选菜局面的概率,i的二进制状态下表示菜的选取情况
利用之前的f[]来转移现在的ans[][],用现在的选取状态来更新当前的f[]
这样得到转移方程:

ans[cnt][j]=(ans[cnt][j]+f[i^(1ll<<j)]*a[cnt][j]%mod*inv[sum[cnt]-tot+a[cnt][j]])%mod;
f[i]=(f[i]+f[i^(1ll<<j)]*a[cnt][j]%mod*inv[sum[cnt]-tot+a[cnt][j]])%mod;

这样复杂度为O(n*2n),注意因为a很小,所以求逆元不要用快速幂,会超时,直接O(n)预处理好即可

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
#define x first
#define y second
typedef pair<int,int> pii;
const int N=21;int dp[N][1<<N];
int  a[N][N];
int f[1<<N];
int ans[N][N];
int sum[N];
int inv[30000000];
const int mod= 998244353;
int qmi(int a,int b)
{int res=1;while(b){if(b&1)    res=res*a%mod;b>>=1;a=a*a%mod;}return res;
}
void init(){inv[1]=1;for(int i=2;i<=2000;++i)inv[i]=mod-(long long)mod/i*inv[mod%i]%mod;
}
signed main()
{int n;cin >> n;init();for(int i=1;i<=n;i++)   {for(int j=0;j<n;j++) cin >> a[i][j],sum[i]=(sum[i]+a[i][j])%mod;}f[0]=1;for(int i=1;i<1<<n;i++){int cnt=0;int tot=0;for(int j=0;j<n;j++)if(i>>j&1)    cnt++;for(int j=0;j<n;j++)if(i>>j&1)  tot=(tot+a[cnt][j])%mod;for(int j=0;j<n;j++){if(i>>j&1){//              cout<<"sum[cnt]-?tot+a[cnt][j]="<<sum[cnt]-tot+a[cnt][j]<<endl;ans[cnt][j]=(ans[cnt][j]+f[i^(1ll<<j)]*a[cnt][j]%mod*inv[sum[cnt]-tot+a[cnt][j]])%mod;f[i]=(f[i]+f[i^(1ll<<j)]*a[cnt][j]%mod*inv[sum[cnt]-tot+a[cnt][j]])%mod;}}
//      cout<<f[i]<<endl;}for(int i=1;i<=n;i++){for(int j=0;j<n;j++)if(j==0)cout<<ans[i][j];else cout<<" "<<ans[i][j];cout<<endl;}
}

icpc网络赛第二场K Meal相关推荐

  1. ICPC网络赛第二场G Limit

    ICPC网络赛第二场G Limit 题意: 给你数组a和b,求解: 1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.1≤n≤100000,−100≤a_{i},b_{i}≤100,0≤ ...

  2. 2021.icpc网络赛第二场

    Leaking Roof 签到 大意:给定 n*n 格子,每个格子的水量为m, 当前格子的水会向周围有公共边的,且高度严格大于的格子等量流动,当且仅当高度为0时水会流出,求最终每个格子流出的水量.n& ...

  3. J Red-Black Paths(ICPC网络赛第一场)

    J Red-Black Paths(ICPC网络赛第一场) 题意: 有n个点,m次操作,有三种操作: 1 u v:从u向v建一个有向边 2 u:将点u染成红色 3 u: 将点u染成黑色 4 查询最新生 ...

  4. 2021ICPC网络赛第二场The 2021 ICPC Asia Regionals Online Contest (II) 【L Euler Function】

    分析: 根据欧拉函数的那个性质 if(p是质数){if(i % p == 0) f[i * p] = f[i] * p;else f[i * p] = f[i] * (p - 1);} 每次区间乘的那 ...

  5. 2022 ICPC网络预选赛第二场 J A Game about Increasing Sequences 歪解

    方便起见,贴一下题面 题目链接:The 2022 ICPC Asia Regionals Online Contest (II) J题是个博弈论的结论题,比赛时死活想不出来.罚坐三小时很痛苦,没有办法 ...

  6. 【线段树-维护区间最小值和区间和】2021 ICPC网络赛第一场 D: Edge of Taixuan

    Problem D: Edge of Taixuan 评测传送门 (ps: 评测时需要先花费一个币买下题目集后方可进行提交并评测.) 题目大意: 给出 n n n个结点, m m m次操作,每次操作给 ...

  7. 2022ICPC网络赛第二场

    B 题意: 就是给你一个n(n<=100)的数组,这个数组是非下降的,然后定义这个数组的价值是所有(va[i]-va[i-1])2 .然后每次操作,你可以选择一个数删掉或者不删,然后再让其中一个 ...

  8. 图论 ---- DAG删点+枚举+暴力+离线前缀异或和 J Red-Black Paths (2021 icpc网络赛第一场)

    补题地址 题目大意: 比赛时候自己演自己卡A-这题也不难 一开始给你一个空图.有4个操作 在图中给u→vu\rightarrow vu→v加一条有向边 把uuu节点涂成红色 把vvv节点涂成黑色 询问 ...

  9. 蓝桥杯模拟赛第二场(web)

    文章目录 蓝桥杯模拟赛第二场(web) 1 卡片化标签页 2 随机数生成器 3 个人博客 4 学生成绩统计 5 水果摆盘 6 给页面化个妆 7 小兔子爬楼梯 8 时间管理大师 9 购物车 10 菜单树 ...

最新文章

  1. python和c运行速度的对比实验_Python中单线程、多线程和多进程的效率对比实验...
  2. 不使用第三个变量,实现两个变量值的交换
  3. jquery图片幻灯片(小图列表,大图展示)
  4. “ShardingCore”是如何针对分表下的分页进行优化的
  5. IT资料,重磅来袭!
  6. 解读华为云原生数据库设计原则,打破传统数据库上云瓶颈
  7. C语言rand函数生成随机数详解和示例
  8. spark 算子使用类变量_Scala与Spark是天生的一对?
  9. Oracle创建函数
  10. Maven无法下载com.oracle:ojdbc14:jar解决方法
  11. 视频采集卡是什么?采集卡的妙用!
  12. 【Python/Pytorch - Bug】-- RuntimeError: ,expected input[16,12,174,145] to have 8 channels,but got 12
  13. Contrastive Multiview Coding
  14. 对应win10的服务器系统,我的系统变成win10远程服务器系统
  15. windows和linux共用蓝牙鼠标,双系统共用蓝牙键鼠(win10+macOS)
  16. postgresql 修改id的自增起始数
  17. [个人笔记]操作系统复习笔记
  18. 设计模式之访问者模式(C++)
  19. 解决QDialogButtonBox按钮的英文翻译问题
  20. 商业模式的构成及有效因素

热门文章

  1. 一张图看懂华为计算全联接2020
  2. 走访近20家代工厂后:近千块的大牌T恤,成本只要几十块
  3. 盘点数学里十大不需语言的证明
  4. 用Python分析了20万场吃鸡数据,有不少有趣的发现
  5. Python难懂?买一次西瓜就懂了!
  6. 升级总代分享思路_桃生企业至尊七郎瓷砖新展厅全新升级惊艳亮相
  7. mysql sleep详解_sql注入详解(二)
  8. micropython 网络驱动_network_网卡驱动
  9. linux安装toncat环境变量,linux下JDK,tomcat的安装与环境变量配置
  10. unix系统mysql卸载教程_Linux操作系统下MySQL的卸载、安装全过程