NC18389 收益
题目
题目描述
小N是一家金融公司的项目经理。他准备投资一个项目,这个项目要融资L元,融资成功后会得到M元的利润。现在有n个客户。对于第i个客户,他有mi元钱。小N承诺假如最后筹够钱,会给这名客户mi x ri的分红。小L通过迷之手段,估计出这个客户最后愿意出钱的概率为pi。 注意,假如公司最后筹够钱,但最终给客户分红比赚的多,他还是需要分出这么多的钱(相当于亏钱了)。现在小L想知道,按前面这样说的去做,公司最后期望能赚多少钱(有可能是负数)。
输入描述
第一行三个个整数n, L, M。
接下来n行,每行三个整数mi, Ri, Pi. 其中 \(r_i = \frac{R_i}{100}, p_i = \frac{P_i}{100}\) .
数据保证 0 ≤ n ≤ 100, \(\sum_{i=1}^n m_i \leq 500000\) , 0 ≤ L,M ≤ 100000。
0 ≤ ri, pi ≤ 100
输出描述
一行一个整数代表公司最后期望收益对10^9 + 7取模的值。一个分数 \(\frac{A}{B}\) 对109+7取模的值,相当于A乘上B的逆元再对109+7取模。
示例1
输入
4 89 88
99 16 80
76 1 6
81 16 70
37 3 96
输出
880839106
题解
知识点:概率dp,背包dp。
考虑设 \(f_{i,j}\) 为考虑了前 \(i\) 个客户获得了 \(j\) 元的期望分红。
由于获得 \(j\) 元的概率都不一致,因此每次加上去的期望都要乘一个概率,所以我们需要记录每种可能的概率。
设 \(g_{i,j}\) 表示考虑了前 \(i\) 个客户获得了 \(j\) 元的概率,那么转移方程显然:
f_{i,j} &= f_{i-1,j} \cdot (1-p_{i})\\
f_{i,\min\{ j + m_i \cdot r_i,L \}} &= f_{i-1,j} \cdot p_{i}\\
g_{i,j} &= g_{i-1,j} \cdot (1-p_{i})\\
g_{i,\min\{ j + m_i \cdot r_i,L \}} &= (g_{i-1,j} + f_{i-1,j} \cdot m_i \cdot r_i) \cdot p_{i}
\end{aligned}
\]
最后答案为 \(f_{n,L} \cdot M - g_{n,L}\) 。
时间复杂度 \(O(nL)\)
空间复杂度 \(O(L)\)
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int P = 1e9 + 7;
const int base = 570000004;
int m[107], p[107], r[107];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, L, M;
cin >> n >> L >> M;
for (int i = 1;i <= n;i++) {
cin >> m[i] >> r[i] >> p[i];
r[i] = 1LL * r[i] * m[i] % P * base % P;
p[i] = 1LL * p[i] * base % P;
}
vector<int> f(L + 1), g(L + 1);
f[0] = 1;
for (int i = 1;i <= n;i++) {
vector<int> ff(L + 1), gg(L + 1);
for (int j = 0;j <= L;j++) {
(ff[j] += 1LL * f[j] * (1 - p[i] + P) % P) %= P;
(ff[min(j + m[i], L)] += 1LL * f[j] * p[i] % P) %= P;
(gg[j] += 1LL * g[j] * (1 - p[i] + P) % P) %= P;
(gg[min(j + m[i], L)] += 1LL * (g[j] + 1LL * r[i] * f[j] % P) * p[i] % P) %= P;
}
f = ff;
g = gg;
}
cout << (1LL * f[L] * M % P - g[L] + P) % P << '\n';
return 0;
}
NC18389 收益的更多相关文章
- iOS绘制收益柱状图
项目需求,参考了其他绘图demo,自己绘制出来了,不过代码改得有点乱,添加了很多变量,时间关系没用太合适的命名,逻辑处理也没进行优化. 看看效果图(虚线区域都是画的,其他区域添加的都是控件),附上源码 ...
- BZOJ 2034 【2009国家集训队】 最大收益
Description 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清: ...
- Bzoj1449 [JSOI2009]球队收益
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 741 Solved: 423 Description Input Output 一个整数表示联盟里所有球 ...
- 【BZOJ-1449&2895】球队收益&球队预算 最小费用最大流
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 648 Solved: 364[Submit][Status][ ...
- [chrome插件] 利滚利计算器 银行存款 基金理财 余额宝收益计算
利滚利计算在数学上是否有一个简单的公式,我不知道,但作为程序员,这个算法实现起来就是小菜一碟.作为插件发布,是因为程序确实简单,也方便Chome浏览器使用者安装.如果你也想使用一下Chrome插件,参 ...
- 山东理工大学第七届ACM校赛-最大收益问题 分类: 比赛 2015-06-26 10:25 51人阅读 评论(0) 收藏
最大收益问题 Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 铁牌狗最近迷上了一款游戏,但铁牌狗实在是太笨了,他还是要请求你的帮助. 有 ...
- BZOJ 1449 球队收益(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1449 题意: 思路:首先,我们假设后面的M场比赛两方都是输的,即初始时的lose[i]再 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- 【BZOJ】【1449】【JSOI2009】球队收益
网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...
- bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)
1449: [JSOI2009]球队收益 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 547 Solved: 302[Submit][Status][ ...
随机推荐
- docker 原理之 namespace (上)
1. namespace 资源隔离 namespace 是内核实现的一种资源隔离技术,docker 使用 namespace 实现了资源隔离. Liunx 内核提供 6 种 namespace 隔离的 ...
- 如何实现 Excel 表格转置(行列互换)
直接上经验贴: https://baijiahao.baidu.com/s?id=1690475581736550777&wfr=spider&for=pc 大概就是 先复制粘贴,在粘 ...
- 如何学习 Photoshop
你有没有想过"图像处理或图形设计看起来很酷,我要学习 Photoshop!" 然后你第一次打开 Photoshop,并被你所看到的东西所震撼. Photoshop 是一款功能强大的 ...
- Linux 查看office文件及pdf文件
1.查看pdf文件 evince PdfFile_name 查看office文件 openoffice.org 文件名 & // 打开或者编辑.doc.odt等文本文档命令 openoffic ...
- [转帖]ESXi主机RAID卡_HBA卡_网卡 型号_固件_驱动查询
https://www.cnblogs.com/vincenshen/p/12332142.html 一.RAID卡/HBA卡 型号_固件_驱动查询 1. 查询所有SCSI设备列表 # esxcfg- ...
- [转帖]Linux | crontab定时任务及开机自启项
本文总结如何使用 crontab 创建定时任务及开启自启项 1. 本文基于 CentOS 7.9 系统所写. Updated: 2022 / 9 / 5 Linux | crontab定时任务及开机自 ...
- 使用buildx在x86机器上面编译arm64架构的Docker镜像
buildx 多架构编译 安装docker 下载docker 下载buildx 安装架构支持 docker run --privileged --rm tonistiigi/binfmt --inst ...
- [转帖]总结:Springboot监控Actuator相关
一.介绍 由于项目中使用的仍然是比较老旧的1.5.6版本,所以本文是基于此版本进行描述. 二.Actuator使用 ActuatorActuator是Spring Boot提供的对应用系统的监控和管理 ...
- [转帖]mysql百万级性能瓶颈-数据库选型
项目中使用了mysql数据库,但数据量增长太快,不久到了百万级,很快又到表到了千万级,尝试了各种优化方式,最终效果仍难达到秒级响应,那么引发了我关于数据库选型到一些思考. 1.mysql的单表性能瓶颈 ...
- 浅析RobotFramework工具的使用 | 京东物流技术团队
1 简介 最近几年越来越多的公司都开始进行自动化测试的设计和布局了,自动化,顾名思义就是把以人为驱动的测试行为转化为机器执行的一种过程,并经常用于回归测试中,市面上也存在很多开源的自动化测试的工具和理 ...