题目链接

题目

题目描述

小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\) 元的概率,那么转移方程显然:

\[\begin{aligned}
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 收益的更多相关文章

  1. iOS绘制收益柱状图

    项目需求,参考了其他绘图demo,自己绘制出来了,不过代码改得有点乱,添加了很多变量,时间关系没用太合适的命名,逻辑处理也没进行优化. 看看效果图(虚线区域都是画的,其他区域添加的都是控件),附上源码 ...

  2. BZOJ 2034 【2009国家集训队】 最大收益

    Description 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清: ...

  3. Bzoj1449 [JSOI2009]球队收益

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 741  Solved: 423 Description Input Output 一个整数表示联盟里所有球 ...

  4. 【BZOJ-1449&2895】球队收益&球队预算 最小费用最大流

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 648  Solved: 364[Submit][Status][ ...

  5. [chrome插件] 利滚利计算器 银行存款 基金理财 余额宝收益计算

    利滚利计算在数学上是否有一个简单的公式,我不知道,但作为程序员,这个算法实现起来就是小菜一碟.作为插件发布,是因为程序确实简单,也方便Chome浏览器使用者安装.如果你也想使用一下Chrome插件,参 ...

  6. 山东理工大学第七届ACM校赛-最大收益问题 分类: 比赛 2015-06-26 10:25 51人阅读 评论(0) 收藏

    最大收益问题 Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 铁牌狗最近迷上了一款游戏,但铁牌狗实在是太笨了,他还是要请求你的帮助. 有 ...

  7. BZOJ 1449 球队收益(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1449 题意: 思路:首先,我们假设后面的M场比赛两方都是输的,即初始时的lose[i]再 ...

  8. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  9. 【BZOJ】【1449】【JSOI2009】球队收益

    网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...

  10. bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 547  Solved: 302[Submit][Status][ ...

随机推荐

  1. @Configuration 注解使用及源码解析

    本文为博主原创,转载请注明出处: @Configuration 注解对我们来说并不陌生,以javaConfig的方式定义spring IOC容器的配置类使用的就是这个@Configuration. s ...

  2. Keep English Level-04

    firm -- 坚定的,坚固的;公司 share -- n 股份,份额 executive -- 执行官 There is no chance,no density,no fate,that can ...

  3. 指定特定IP走特定网卡的方法

    指定特定IP走特定网卡的方法 背景 目标: 能够在有VPN以及多个网卡的情况下, 使用特定的IP地址进行登录服务器. 作用: 便于审计以及安全管理, 避免出现安全风险. 方式方法: route 命令设 ...

  4. [转帖]ORACLE 并行(PARALLEL)实现方式及优先级

      http://blog.itpub.net/25542870/viewspace-2120924/ 一.      Parallel query 默认情况下session 是ENABLE状态 1. ...

  5. [转帖]clickhouse使用clickhouse-keeper代替zookeeper

    目录 异常现象: 1. clickhouse的异常日志 2. 追踪对应节点的zookeeper日志 使用clickhouse-keeper代替 zookeeper的步骤: 1: 准备 clickhou ...

  6. [转帖]解决jmeter请求响应结果乱码的问题

    如下图所示,请求百度接口的时候,发现返回的信息里面中文是乱码 这个时候我们只需要改一下jmeter里的配置文件,设置响应结果的字符编码为UTF-8就行了. 进入jmeter安装目录/bin中,找到jm ...

  7. [转帖]python中input()、print()用法

    https://www.cnblogs.com/lei3082195861/p/16967109.html 1.input()函数常涉及的强制类型转换 第一种是在键入时进行转换,例如:a = int( ...

  8. [转帖]20个常用的Linux工具命令

    https://www.cnblogs.com/codelogs/p/16060113.html 简介# 网上有很多辅助开发的小工具,如base64,md5之类的,但这些小工具其实基本都可以用Linu ...

  9. UOS可能的来源

    1050a 行业版 是基于 阿里的Anolis 1050d 企业版 是基于debian 1050e 欧拉版 是基于华为欧拉 euler

  10. 分布式日志追踪ID实战 | 京东物流技术团队

    本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率. 背景 开发排查系统问题用得最多的手段就是查看系统日志 ...