首页 > 其他分享 >合法方案数(dp)

合法方案数(dp)

时间:2024-07-14 21:18:28浏览次数:8  
标签:方案 血量 long 合法 死光 dp Mod

https://www.luogu.com.cn/problem/CF1606E


第3题     合法方案数 查看测评数据信息

有n个人,他们要进行下面的进程:每轮设存活i个人,那么每个存活的人会对其他人造成1点血量的代价,血量小于等于零就会被淘汰,现在需要你给他们每个人设置一个在[1,x]之间的初始血量,使得某轮游戏结束后,无人生还,求这样的方案数。对998244353取模

输入格式

 

第一行两个整数n和x

2<=n<=500,1<=x<=500

 

输出格式

 

一个整数

 

输入/输出例子1

输入:

2 5

 

输出:

5

 

样例解释

 

定dp状态时,不知道每个值的具体数,但又需要用到,可以定为这一堆值中的最大值是多少,再慢慢推!

 

又一道dp好题

这题看着是很迷糊的,但是看到方案数应该要想到dp。考虑到n的范围较小,可以选用二维到三维。我们先考虑二维,不行再补一个维

定f(i, j)表示: 现在有i个人活着,且这i个人最大的那个人的血量j

这是根据题目中两个关键变量定的,第二维就很奇妙,几乎涵盖每个人的血量

然后分类转移。

由题目知,每个人会扣i-1的血量,那我们讨论这一堆人是死光还是没死光

死光:

i-1>=j,很显然是这个条件,具体转移方程呢?

考虑用减法原理(正面不好想)转化为,全部方案数-最大血量不为j的数量,就求出了最大血量为j的方案数

全部方案数:每个人最多j点血量,共i人,全部方案数就为  j^i

最大血量不为j:每个人最多j-1点血量,共i人,全部方案数就为  (j-1)^i

总结就是 f(i, j)=j^i-(j-1)^i

 

没死光:

就是死光的反过来,i-1<j

没死光可以讨论部分人活着,部分人死了,最后他俩相乘即可

设活着k人。那么考虑这k个人分别在哪个位置,以及他们的最大血量(j减去i-1嘛)

活着方案数:C(i, k) * f(k, j-(i-1)) 

死了的人,死前最大血量容易得出是i-1,即为扣除血量,有i-k人死了,就推出以下式子(因为活着的人位置已经选过了,那死的人的位置自然确定好了)

死了方案数: (i-1)^(i-k)

 

总结就是 f(i, j)=C(k, i) * f(k, j-(i-1)) * (i-1)^(i-k)

 

#include <bits/stdc++.h>
using namespace std;
const int N=505, Mod=998244353;

int n, x;
long long ans=0, f[N][N], yh[N][N];
long long Pow(long long a, long long b)
{
	long long sum=1;
	while (b)
	{
		if (b&1) sum=sum%Mod*a%Mod;
		b>>=1;
		a=a*a%Mod;
	}
	return sum;
}
void yanghui()
{
	for (int i=1; i<504; i++)
	{
		yh[i][1]=yh[i][i]=1;
		for (int j=2; j<i; j++)
		{
			yh[i][j]=(yh[i-1][j]+yh[i-1][j-1])%Mod;
		}
	}
}
long long C(int n, int m)
{
	return yh[n+1][m+1];
}
int main()
{
	yanghui();
	scanf("%d%d", &n, &x);
	
	for (int i=2; i<=n; i++)
	{
		for (int j=1; j<=x; j++)
		{
			if (i-1>=j) f[i][j]=(Pow(j, i)-Pow(j-1, i)+Mod)%Mod;
			else
			{
				for (int k=1; k<=i; k++)
				{
					f[i][j]=(f[i][j]+((C(i, k)*f[k][j-(i-1)])%Mod*Pow(i-1, i-k))%Mod)%Mod;
				}
			}
		}
	}
	
	for (int i=1; i<=x; i++) ans=(ans+f[n][i])%Mod;
	
	printf("%lld", ans);
	return 0;
}

  

标签:方案,血量,long,合法,死光,dp,Mod
From: https://www.cnblogs.com/didiao233/p/18302033

相关文章

  • T113-i系统启动速度优化方案
    背景:        硬件:T113-i+emmc        软件:uboot2018+linux5.4+QT应用        分支:longan问题:        全志T113-i的官方系统软件编译出的固件,开机启动时间10多秒,启动时间太长,远远超过行业内linux系统的开机速度,需要进一步优化。T1......
  • Android Viewpager2 remove fragmen不生效解决方案
    一、介绍在如今的开发过程只,内容变化已多单一的fragment,变成连续的,特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动,到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓存,导致想立马生效出现问题,不符合国内的业务场景。......
  • WordPress:快速搭建站点,wp安装及模版介绍
    最近搭建个人站点比较多,都是想把业务做到国外,通过google来引流,那我们今年就来介绍一个比较受欢迎的站点平台wordPress。WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用......
  • 题解:CodeForces 835 D Palindromic characteristics[区间dp/马拉车Manacher]
    CodeForces835DD.Palindromiccharacteristicstimelimitpertest:3secondsmemorylimitpertest:256megabytes*inputstandardinputoutputstandardoutputPalindromiccharacteristicsofstring\(s\)withlength\(|s|\)isasequenceof\(|s|\)in......
  • 监狱AI视频分析监控算法方案 YOLOv3
    监狱AI视频分析监控算法方案可以对现场人员行为及物体状态进行实时分析识别,监狱AI视频分析监控算法方案对监控画面中特殊区域入侵监测、睡岗脱岗监测、越界监测、人员异常徘徊监测、视频骤变监测、攀高识别、跌倒检测、夜间起床识别、打架斗殴检测、异常速度监测、遗留物监测等......
  • [DP] 数位DP
    本文主要内容:数位DP例题数位DP主要有两种方法,填数法和记搜。这里主要研究记搜的实现;模板相比于填数法,记搜的优点在于有固定的模板,实现较容易;缺点在于需要很多$memset$,常数较大,容易被卡;下面通过几道例题来了解记搜模板;一$haha$数设记搜各参数如下:longlongdfs(......
  • mongoDB 报错 MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017 : 一个可行的
    今天启用mongoshell时发现报错如下:尝试数据指令mongod启动服务器也没有作用,上网查询解决方案后发现是没有在service里面启动mongodb服务,启动该服务后再键入mongosh命令即可正常运行mongoshell。具体操作如下:STEP1:win+R➡️输入services.msc➡️确定 STEP2:找到MongoD......
  • 智慧校园信息化大平台整体解决方案PPT(75页)
    1.教育信息化政策教育部印发《教育信息化2.0行动计划》,六部门联合发布《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》,中共中央、国务院印发《中国教育现代化2035》。这些政策文件强调了教育的全面发展、面向人人、终身学习、因材施教、知行合一、融合发......
  • 公共资源管理服务中心智能化方案PPT(97页)
    公共资源管理服务中心智能化方案摘要1.建设背景及需求公共资源管理服务中心的建设以便民、高效、廉洁、规范为宗旨,推行“一站式办公、一条龙服务、并联式审批、阳光下作业、规范化管理”的运行模式。目标是提高行政效率和社会效益,预防流程漏洞,加强多重监管,实现阳光操作,建立......
  • 智慧景区综合解决方案PPT(53页)
    智慧景区综合解决方案摘要建设背景智慧景区综合解决方案在文旅融合、政策支撑和行业背景三大背景下提出。文旅融合强调文化和旅游的结合,政策支撑如《“十三五”全国旅游信息化规划》和《江苏省文化和旅游厅2019年工作要点》为智慧旅游提供指导,行业背景则突出了旅游业对GDP的......