首页 > 其他分享 >Luogu7509 撕裂消除 - 期望dp -

Luogu7509 撕裂消除 - 期望dp -

时间:2023-01-14 15:44:50浏览次数:61  
标签:return int ll Luogu7509 maxn 撕裂 dp mod

题目链接:https://www.luogu.com.cn/problem/P7509

题解:
设 \(dp[i][j][0/1]\) 表示考虑到第 \(i\) 个位置,已经形成了极大的 \(j\) 段,当前位置为 0/1 的期望值 ; \(g[i][j][0/1]\) 也同理,不过维护的是概率
(思考:这种不是求最优决策而是求某种固定的答案的问题,可以再开一个数组维护一下当前状态下的其它值,因为没有决策也就没有 max/min 之类的操作,因此维护比较方便)

转移:

(from 官方题解)

注意维护一下 \(j=0\) 的时候的 \(g\) 流行了

// by SkyRainWind
#include <bits/stdc++.h>
#define mpr make_pair
#define debug() cerr<<"Yoshino\n"
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define pii pair<int,int>

using namespace std;

typedef long long ll;
typedef long long LL;

const int inf = 1e9, INF = 0x3f3f3f3f, mod = 998244353, maxn = 2e5+5;

int n,k,a[maxn],p[maxn];
int dp[maxn][22][2], g[maxn][22][2];

ll pw(ll x,int y){
	if(!y)return 1;
	if(y == 1)return x%mod;
	ll mid=pw(x,y>>1);
	if(y&1)return 1ll*mid*mid%mod*x%mod;
	return 1ll*mid*mid%mod;
}

signed main(){
//	freopen("Luogu7509.in","r",stdin);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)scanf("%d",&p[i]);
	
	g[0][0][0] = 1;
	for(int i=1;i<=n;i++){
		dp[i][0][0] = 0;
		g[i][0][0] = 1ll * (1-p[i]+mod) * g[i-1][0][0] % mod;
		for(int j=1;j<=min(k, (i+1)/2);j++){
			(dp[i][j][0] += 1ll * (1-p[i]+mod) * (dp[i-1][j][1] + dp[i-1][j][0]) % mod) %= mod;
			(dp[i][j][1] += 1ll * p[i] * (dp[i-1][j-1][0] + 1ll * g[i-1][j-1][0] * a[i] % mod) % mod) %= mod;
			(dp[i][j][1] += 1ll * p[i] * (dp[i-1][j][1] + 1ll * g[i-1][j][1] * a[i] % mod) % mod) %= mod;
			(g[i][j][1] += 1ll * p[i] * (g[i-1][j][1]+g[i-1][j-1][0]) % mod) %= mod;
			(g[i][j][0] += 1ll * (1-p[i]+mod) * (g[i-1][j][1] + g[i-1][j][0]) % mod) %= mod;
		}
	}
	int bs = pw((g[n][k][1] + g[n][k][0])%mod, mod-2);
	cout<<(dp[n][k][1]+dp[n][k][0])%mod;

	return 0;
}

标签:return,int,ll,Luogu7509,maxn,撕裂,dp,mod
From: https://www.cnblogs.com/SkyRainWind/p/17051926.html

相关文章

  • 通过tcpdump抓取lldp/cdp报文判断服务器上联网络配置
    在一般运维工作中,时常要检查服务器的网络配置,例如服务器有几个网卡,有没有做绑定,上联网络情况等。一般可以从以下几个方面判断:查看布线表查看CMDB搜索相关信息通过上行交换机......
  • 动态规划笔记(一):初识DP
    动态规划(DP)DP问题特征特征:重叠子问题、最优子结构、无后效性重叠子问题:计算大问题需要重复计算小问题,DP可以避免重复计算,代价是消耗更多的空间最优子结构:大问题的最优......
  • DP7361 是一款立体声六通道线性输出的数模转换器-兼容CS4361
    DP7361是一款立体声六通道线性输出的数模转换器,内含插值滤波器、Multi-Bit数模转换器、模拟输出滤波器,支持主流的音频数据格式。DP7361片上集成线性低通模拟滤波器和四......
  • 【luogu CF1707D】Partial Virtual Trees(容斥)(DP)
    PartialVirtualTrees题目链接:luoguCF1707D题目大意给你一棵以1为根的数,问你对于每个长度,有多少个点集序列,第一个点集是全部点,最后一个点集只有1号点,且中间每个点......
  • Educational Codeforces Round 110 C(最长连续字串,dp),D(左右子树继承贡献dp)
    C.UnstableString题目大意:给定一个长度为n的字符串且只包括'0','1','?',其中如果一个字串是由01交替组成的则称谓不稳定的,如果碰到'?'则可以将其转化为0/1,求不稳定的......
  • DPDK入门实践2——编译安装与helloworld
    要想弄懂一个工程,在了解完它的基本概念和大体架构之后,就让它跑起来。看看是怎么玩转的,然后再深入细节。这里我先到GitHub上下载dpdk工程的18.11.2稳定版本,之所以选择这个版......
  • dpdk入门实践4--IGB_UIO、VFIO和KNI三大模块
    模块安装运行dpdk源文件(以18.11.2版本为例)中usertools/dpdk-setup.sh脚本可以选择如下选项18、19、20分别加载IGB_UIO、VFIO或者KNI模块。要能加载成功首先要编译安装好......
  • dpdk入门实践7——LoadbalanceSampleApplication
    运行编译好dpdk示例程序之后,可使用以下命令运行程序。我编译的环境是绑定了两张dpdk网卡,主机是64核,2个numa节点。./build/load_balancer-l3-7-n4----rx"(0,0,3),......
  • dpdk入门实践6——L2fwd二层通信和l3fwd三层通信
    DPDK从网卡直接取数据到用户空间,需要有数据转发的规则才能通信。也就是说需要用户实现相关通信网络协议实现相关数据包的转发(有些协议栈不转发ICMP报文那就Ping不通),例如腾......
  • dpdk入门实践5--basicfwd和pktgen
    安装pktgen我之前安装的dpdk版本是stable-18.11.2,linux版本为3.10.0-1160.36.2.el7.x86_64,从网站http://git.dpdk.org/apps/pktgen-dpdk/refs/下载尝试多个版本的pktg......