当前位置: 首页 > news >正文

洛谷P6054思路分享(网络流,期望)

https://www.luogu.com.cn/problem/P6054

题意概述

\(n\) 位选手参与答题,共有 \(m\) 套题,每套包含 \(p\) 道题。

\(i\) 位选手答对第 \(j\) 套题的第 \(k\) 道题的概率为 \(f_{i,j,k}\)

选手必须按顺序答题,答对获取 \(c_k\) 元,答错直接结束。

存在 \(y\) 条约束关系,每条约束包含三个参数 \(i,j,k\),表示“第 \(i\) 位选手分配的套题编号必须比第 \(j\) 位选手大 \(k\)” 。

给每位选手分配一套题,求出所有人获得期望奖励之和的最小值,若无法分配,输出 \(-1\)

思路

首先计算出第 \(i\) 个人做第 \(j\) 套题的期望奖励 \(a_{i,j}\)

约束条件比较复杂且数据范围较小,考虑网络流。

对于第 \(i\) 个人的第 \(j\) 套题,连 \((i,j)\) -> \((i,j+1)\),容量为 \(a_{i,j}\) 的边;同时连 \(s\) -> \((i,1)\),和 \((i,m+1)\) -> \(t\),容量均为无穷大的边。

这样割掉 \((i,j)\) -> \((i,j+1)\) 的边就代表第 \(i\) 个人选第 \(j\) 套题。

对于 \(y\) 条约束,可以对所有满足条件的 \(x\),连 \((j,x)\) -> \((i,min(m+1,x+k))\),容量为无穷大的边。

可以这样理解:

假如第 \(j\) 个人选了第 \(x\) 套题,那么 \((j,x)\) 属于 \(S\) 集;同时第 \(i\) 个人选了第 \(x'\) 套题, \((j,x')\) 属于 \(S\) 集,那么所有 \(x'' \gt x'\)\((j,x'')\) 都属于 \(T\) 集。

要求 \(x' \ge x+k\),那么所有 \(x'' \le x+k\)\((i,x'')\) 都必须属于 \(S\) 集,为了保证连通性,连 \((j,x)\)\((i,x+k)\) 的边,容量为无穷大保证不会被割掉。

然后跑网络流即可。

代码

//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;const ll INF = 1e18;
const double eps = 1e-9;class E{
public:double w;int rev,v;E() = default;E(double w,int rev,int v):w(w),rev(rev),v(v){}
};void solve(){int n,m,p,y;cin >> n >> m >> p >> y;vector<ll> c(p+1);for (int i=1;i<=p;i++){cin >> c[i];} vector<vector<vector<double>>> f(n+1,vector<vector<double>>(m+1,vector<double>(p+1)));for (int j=1;j<=m;j++){for (int i=1;i<=n;i++){for (int k=1;k<=p;k++){cin >> f[i][j][k];}}}vector<array<int,3>> b(y+1);for (int i=1;i<=y;i++){cin >> b[i][0] >> b[i][1] >> b[i][2];}vector<vector<double>> a(n+1,vector<double>(m+1));for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){double res = 0;ll sum = 0;double pe = 1;for (int k=1;k<=p;k++){res += sum*pe*(1-f[i][j][k]);sum += c[k];pe *= f[i][j][k];}res += sum*pe;a[i][j] = res;}}int N = n*(m+1)+2;vector<vector<E>> adj(N+1);int s = N-1;int t = N;auto add = [&](int u,int v,double w){adj[u].push_back({w,(int)adj[v].size(),v});adj[v].push_back({0,(int)adj[u].size()-1,u});};for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){add((i-1)*(m+1)+j,(i-1)*(m+1)+j+1,a[i][j]);}add(s,(i-1)*(m+1)+1,INF);add((i-1)*(m+1)+m+1,t,INF);}for (int tt=1;tt<=y;tt++){auto& [i,j,k] = b[tt];for (int x=1;x<=m;x++){if (x+k<1) continue;add((j-1)*(m+1)+x,(i-1)*(m+1)+min(m+1,x+k),INF);	}}vector<int> depth(N+1),cur(N+1);auto bfs = [&](){for (int i=1;i<=N;i++){depth[i] = -1;}depth[s] = 0;queue<int> q;q.push(s);while (!q.empty()){int u = q.front();q.pop();for (auto& [w,rev,v]:adj[u]){if (w>eps && depth[v]==-1){depth[v] = depth[u]+1;q.push(v);if (v==t) return true;}}}return false;};function<double(int,double)> dfs = [&](int u,double mf){if (u==t) return mf;int len = adj[u].size();double sum = 0;for (int& i=cur[u];i<len;i++){auto& [w,rev,v] = adj[u][i];if (w<=eps || depth[v]!=depth[u]+1) continue;double f = dfs(v,min(mf,w));w -= f;mf -= f;adj[v][rev].w += f;sum += f;if (mf<=eps) break;}if (sum<=eps){depth[u] = -1;}return sum;};double mxf = 0;while (bfs()){for (int i=1;i<=N;i++){cur[i] = 0;}		mxf += dfs(s,INF);}if (mxf-INF/2>=-eps){cout << -1 << '\n';}	else{cout << fixed << setprecision(12) << mxf << '\n';}
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t;cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/785683/

相关文章:

  • DeepSeek V4 上线,Tabbit 更会干活了(限时白嫖 pro 会员)
  • Kubernetes自定义资源定义(CRD)深度解析与实践
  • CANN/mat-chem-sim-pred DPD算子设计文档
  • STM32 内核
  • 呼和浩特搬家怎么选?2025年本地搬家市场格局与五大机构深度测评 - 品牌策略师
  • CANN/AMCT保存量化重训练模型
  • CANN/cann-recipes-infer Kimi-K2-Thinking配置指南
  • JAVA TREE
  • cann/runtime 多设备编程
  • 卷积改进与轻量化:2026 生产级轻量:将 MobileOne 重新参数化块引入 YOLO 主干,iPhone 上实时运行
  • Kubernetes多集群管理与联邦:构建跨地域高可用架构
  • 异常类
  • 2026年4月技术好的升降窗品牌推荐,断桥窗沙一体内开窗/铝合金阳光房/系统推拉门/阳光房,升降窗厂家哪个好 - 品牌推荐师
  • 基于OpenAI API与Slack平台构建智能对话机器人的实践指南
  • Avast 阻止引用程序访问网络
  • 生产级AI系统不确定性管理:从量化到决策的工程实践
  • CANN竞赛仓Add算子测试报告
  • 在Windows 11上无缝运行Android应用:Windows Subsystem for Android完整指南
  • 2026年好用的免费在线去水印工具怎么选?免费一键去水印网站最新推荐 - 科技热点发布
  • 一键部署AI助手沙箱:OpenClaw计算机容器在ModelScope与HuggingFace的实战指南
  • 基于NGSI-LD的物联网数据质量评估与增强实践
  • EDA-设计规模爆炸
  • LeetCode 3629.通过质数传送到达终点的最少跳跃次数:埃式筛+BFS
  • 有没有哪家包间又带独立厕所环境又好
  • 文献计量分析揭示AI在金融与创业交叉领域的研究热点与趋势
  • 我的编程启程:从零基础出发,奔赴心之所向
  • 在NPU环境上适配HunyuanImage-3.0模型的推理
  • 3.MySQL数据表操作全解析,一篇吃透!
  • 2026年一键去水印工具怎么选?在线去水印操作教程及推荐排行 - 科技热点发布
  • AI模型公平性:从统计定义到工程实践的全面解析