经典套路。

题意

你将随机生成一个长度为 \(k\) 的数组 \(a\),其中 \(a_i\) 有 \(p_i\) 概率为 \(1\),否则为 \(-1\)。定义其前缀和数组 \(s_i = \sum\limits_{j = 1}^{i}a_j, i \in [0, k]\)。如果前缀和数组的最大值为 \(t(t \in [0, k])\) 那么你将获得 \(h_t\) 的权值。给定数组 \(p_{1 \dots n}, h_{1 \dots n}\),对于所有 \(k = 1 \dots n\),请输出你获得权值的数学期望。对 \(10^9+7\) 取模。

数据范围:\(1 \le n \le 5000, 0\le h_i \le 10^9\)。

做法

考虑直接 DP,那么你必须记录当前值和先前的最大值两个信息,状态是 \(\Theta(n^3)\) 的,埋了。接下来考虑容斥,考虑了一年,没做出来。怎么办呢?

首先将问题抽象为一个二维平面上随机生成一串线段,要么向上斜要么向下斜,然后头尾接起来形成的形状的最高点是要考虑的东西。你可以联想到那种一排矩形的问题可以竖过来一层一层 DP。这里同理。不要考虑当前这一步在先前积累下的影响下要怎么走,而是去考虑在开头添加一步对后面的影响。那么我只关心后面的最高高度,它会被平移一下;而当前位置的高度是确定的——\(0\)。这样就好办了,直接倒过来 DP 就行了。

但是很不幸你必须枚举 \(f_{k, 0} = 1\) 作为转移起点再 DP,这样还是三方。但是没关系,我们发现最终状态是确定且唯一的。所以直接把 DP 转移的方向也全部倒过来,把系数 \(h_i\) 填到 \(f_{0, i}\) 作为初始状态,然后对于每个 \(k\) 统计 \(f_{k, 0}\) 的值即可。

代码

// Author: kyEEcccccc

#include <bits/stdc++.h>

using namespace std;

using LL = long long;
using ULL = unsigned long long; #define F(i, l, r) for (int i = (l); i <= (r); ++i)
#define FF(i, r, l) for (int i = (r); i >= (l); --i)
#define MAX(a, b) ((a) = max(a, b))
#define MIN(a, b) ((a) = min(a, b))
#define SZ(a) ((int)((a).size()) - 1) constexpr int N = 5005, MOD = 1000000007; LL kpow(LL x, LL k = MOD - 2)
{
x = x % MOD;
LL r = 1;
while (k)
{
if (k & 1) r = r * x % MOD;
x = x * x % MOD;
k >>= 1;
}
return r;
} int n, po[N];
int f[2][N]; void work(void)
{
cin >> n;
F(i, 1, n)
{
int x, y; cin >> x >> y;
po[i] = x * kpow(y) % MOD;
}
F(i, 0, n) cin >> f[0][i]; int ci = 1, pi = 0;
F(i, 1, n)
{
F(j, 1, n - i)
{
f[ci][j] = ((LL)f[pi][j + 1] * po[i]
+ (LL)f[pi][j - 1] * (1 - po[i] + MOD)) % MOD;
}
f[ci][0] = ((LL)f[pi][1] * po[i]
+ (LL)f[pi][0] * (1 - po[i] + MOD)) % MOD;
cout << f[ci][0] << " \n"[i == n];
swap(ci, pi);
}
} signed main(void)
{
// freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
ios::sync_with_stdio(0), cin.tie(nullptr); int _; cin >> _;
while (_--) work(); return 0;
}

CF1810G The Maximum Prefix的更多相关文章

  1. uva 11488 Hyper Prefix Sets(狂水)

    题意: 获得集合中最长前缀长度*有该前缀个数的最大值 Prefix goodness of a set string is length of longest common prefix*number ...

  2. HDU 11488 Hyper Prefix Sets (字符串-Trie树)

    H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...

  3. UVa11488-Hyper Prefix Sets(trie树)

    H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...

  4. uva 11488 - Hyper Prefix Sets(字典树)

    H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...

  5. [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字

    Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  6. maximum subarray problem

    In computer science, the maximum subarray problem is the task of finding the contiguous subarray wit ...

  7. Leetcode: Maximum XOR of Two Numbers in an Array

    Given a non-empty array of numbers, a0, a1, a2, - , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  8. Maximum Subarray Sum

    Maximum Subarray Sum 题意 给你一个大小为N的数组和另外一个整数M.你的目标是找到每个子数组的和对M取余数的最大值.子数组是指原数组的任意连续元素的子集. 分析 参考 求出前缀和, ...

  9. LightOJ DNA Prefix(字典树+dfs)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/F F - DNA Prefix Time Limit:200 ...

  10. [LeetCode] Prefix and Suffix Search 前后缀搜索

    Given many words, words[i] has weight i. Design a class WordFilter that supports one function, WordF ...

随机推荐

  1. 【FINALE】NOIP2022 退役记 || THE END.

    我的停课生活相册 - password:1007 目录 Day -4 Day -2 Day -1 Day 1 2022/11/26 NOIP 2022 OI 浅忆录 Day -4 好冷啊.有了那么点冬 ...

  2. 在 Rainbond 上使用在线知识库系统zyplayer-doc

    zyplayer-doc 是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它. 当 ...

  3. 太坑了吧!一次某某云上的redis读超时排查经历

    一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案. 问题背景 ...

  4. C++ 测试框架 GoogleTest 初学者入门篇 丙

    theme: channing-cyan *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRno ...

  5. 为什么 APISIX Ingress 是比 Emissary-ingress 更好的选择?

    本文从可扩展性和服务发现集成等多个维度对比了 APISIX Ingress 与 Emissary-ingress 的性能. 作者:容鑫,API7.ai 云原生技术工程师,Apache APISIX C ...

  6. 尝试CentOS8---部署集群(生产环境7.9为好)

    一.LVS集群简介 什么是集群 通过网络将很多服务器集中起来,提供同一种服务,在客户端看来就像是只有一个服务器 二.LVS-NAT集群 1.环境准备 启动3台虚拟机,禁用selinux和firewal ...

  7. Typecho<=1.2.0 存储型XSS 复现

    Typecho<=1.2.0 存储型XSS 影响版本 漏洞影响版本:Typecho <= 1.2.0 漏洞复现 cookie.js // 定义一个全局变量 website,值为一个具体的网 ...

  8. 海思码率控制相关参数调优(CBR/VBR)

    1.CBR 海思相关参数调整(在Hisi板,cat /proc/umap/rc 可查看相关参数变化) 1.1 RC参数 1.2 VENC参数 VENC_PARAM_H264_CBR_S/VENC_PA ...

  9. Java并发(四)----线程运行原理

    1.线程运行原理 1.1 栈与栈帧   Java Virtual Machine Stacks (Java 虚拟机栈 JVM) 我们都知道 JVM 中由堆.栈.方法区所组成,其中栈内存是给谁用的呢?其 ...

  10. 带大小写忽略的Replace

    #region 以下函数用于忽略大小写替换操作 public static string Replace(string Expression, string Find, string Replacem ...