首页 > 其他分享 >金箱子

金箱子

时间:2024-08-22 19:04:30浏览次数:4  
标签:箱子 ch cdot sum int ans inv

我们设 \(f[i][j]\)表示目前前 \(i\) 个宝箱的期望贡献的 \(j\) 次方。

根据题意可得 $f[i][k]=(f[i-1][1]+a[i])^k \cdot p[i]+(f[i-1][1]+b[i])^k \cdot (1-p[i]) $

这个式子很难处理,不妨用二项式定理优化

优化后式子则为:\(f[i][k]= \sum _{j=0}^{k} C_{k}^{j} \cdot f[i-1][j] \cdot a[i]^{k-j} \cdot p[i]+ \sum _{j=0}^{k}f[i-1][j] \cdot b[i]^{k-j} \cdot (1-p[i])\)

合并一下

\(f[i][k]= \sum _{j=0}^{k} C_{k}^{j} \cdot f[i-1][j] \cdot (a[i]^{k-j} \cdot p[i] +b[i]^{k-j} \cdot (1-p[i]) )\)

到这里我们就可以在 \(O(nk)\) 预处理\((a[i]^{k-j} \cdot p[i] +b[i]^{k-j} \cdot (1-p[i]) )\),再 \(O(nk^2)\) 转移了。

using namespace std;

#define int long long
const int N=1e4+107;
const int mod=998244353;

int n,k;
int p[N],a[N],b[N];

int read()
{
	int f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return f*s;
}

int qpow(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%mod;
		b=b>>1;
		a=a*a%mod;
	}
	return ans;
}

int ans=0;
int fac[200],inv[N];
void init()
{
	fac[0]=inv[0]=1;
	for(int i=1;i<120;i++)
	{
		fac[i]=fac[i-1]*i%mod;
		inv[i]=qpow(fac[i],mod-2);
	}
}

int C(int n,int m){return fac[n]*inv[n-m]%mod*inv[m]%mod;}

int f[N][120],tmp[N][120];
signed main()
{
	init();
	n=read(),k=read();
	for(int i=1;i<=n;i++)
	{
		p[i]=read(),a[i]=read(),b[i]=read();
	}
	
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		tmp[i][0]=f[i][0]=1;
		for(int j=1;j<=k;j++)
		{
			tmp[i][j]=(qpow(a[i],j)*p[i]%mod+qpow(b[i],j)*(1-p[i]+mod)%mod)%mod;
		}
	}
	for(int i=1;i<=k;i++)
	{
		f[1][i]=tmp[1][i];
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=k;j++)
		{
			for(int g=0;g<=j;g++)
			{
				f[i][j]=(f[i][j]+f[i-1][g]*C(j,g)%mod*tmp[i][j-g]%mod)%mod;
			}
		}
	}
	printf("%lld",f[n][k]);
	return 0;
}`

标签:箱子,ch,cdot,sum,int,ans,inv
From: https://www.cnblogs.com/zhengchenxi/p/18374464

相关文章

  • csp模拟27-金箱子(题解)
    题目链接(显然还没有找到原题)虽说我现在才学会期望dp显得不太好,但没办法,谁让我比较菜~~,之前模拟赛已经考过几道类似的题了,但都一笔带过了,这次算是正式学习了一下这类题,于是就有了这篇题解。首先看到k次方首先想到的就是我们在进行dp转移的时候不太方便,这个时候很自然的想到二项......
  • 基于 Java 的推箱子游戏设计与实现
    点击下载链接基于Java的推箱子游戏设计与实现摘要社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点......
  • 五子棋+推箱子
    my_program项目简介本项目设计了两个小游戏——推箱子以及五子棋并将两个项目集成带一个函数中推箱子玩家通过控制wasd来操纵任务位置与目标位置成河五子棋玩家可以选择与机器人对战或者与其他玩家对战(不支持联网)推箱子项目参考教程C语言推箱子有关卡无尽版之童年回忆!!ea......
  • 3-04. 实现箱子储物空间的保存和数据交换
    实现箱子与背包数据交换修改SlotUI修改InventoryManager修改SlotUI实现箱子数据保存目标当场景切换之后,箱子里面的数据不能丢失修改InventoryManager修改Box修改InventoryManager修改Box修改DataCollection修改ItemManager修改Box修改It......
  • [Kyana]小游戏之Unity推箱子
    00|学到的内容01|素材引入02|地图配置03|脚本编写Man.csusingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassMan:MonoBehaviour{Vector2man_direction;//自定义只在本脚本临时生效的名字,需要在编辑器选择具体生......
  • c语言 推箱子小游戏二次开发
    内容来源:CSDN(额………………):https://blog.csdn.net/m0_71832999/article/details/128050830?ops_request_misc=&request_id=&biz_id=102&utm_term=c++推箱子小游戏&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-128050830.142v99pc_se......
  • 人形/四足变形金刚像行李搬运工一样扔箱子
     ANYmal外形小巧,四足行走,看起来就像一只带轮子的机器狗        SwissMileSwissMile'sANYmalrobotisaremarkablebeast,capableofgettingaroundasa wheeledquadruped,or standinguponitshindlegs andusingitsfrontwheelsashands.......
  • <推箱子>小游戏隐私协议
    <推箱子>小游戏隐私协议欢迎您使用<臣妾要告发熹贵妃工作室>开发的<推箱子>小游戏!在使用本游戏之前,请您仔细阅读以下隐私协议。个人信息的收集与使用1为了提供更好的游戏体验和服务,我们可能会收集一些您的个人信息,例如您的设备标识符、操作系统版本、游戏进度等。2我们承诺不......
  • 推箱子保证单调性的正确性
    如果保证了单调性,那么一个状态在出队的时候,一定是这个状态的最优情况反证,如果不是最优情况,那么肯定存在一个状态A,A能到达这个状态且会让这个状态变优由于这个状态变优了,要么就是箱子移动的步数少了,要么就是箱子移动的步数是一样的但人移动的步数少了然后这个更优的状态是由A移......
  • 【算法题】2525. 根据规则将箱子分类
    题目:给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。如果满足以下条件,那么箱子是“Bulky”的:箱子至少有一个维度大于等于104。或者箱子的体积大于等于109。如果箱子的质量大于等于100,那么箱子是......