首页 > 其他分享 >【CF1515E Phoenix and Computers】(插入法dp)

【CF1515E Phoenix and Computers】(插入法dp)

时间:2023-03-23 16:44:30浏览次数:43  
标签:手动 int CF1515E 电脑 开启 插入法 include dp mod

原题链接

题意

给定 \(n\),\(M\)。你有 \(n\) 台电脑排成一排,你需要依次开启所有电脑。

你可以手动开启一台电脑。在任意时刻,若电脑 \(i-1\) 与电脑 \(i+1\) 都已经开启 \((1<i<n)\),电脑 \(i\) 将立刻被自动开启。你不能再开启已经开启的电脑。

求你有多少种开启电脑的方案。两个方案不同当且仅当你手动开启的电脑的集合不同,或是手动开启电脑的顺序不同。答案对 \(M\) 取模。

思路

对于最终所有电脑的状态,一定是类似于\(一段手动开启+一个自动开启+一段手动开启 \cdots\) 的形式,于是可以想到对所有连续手动开启的段进行 dp。

设 \(f_{i,j}\) 表示将 \(i\) 台电脑划分为 \(j\) 个连续段的方案,不难得到转移方程:

  • 第 \(i+1\) 台电脑单独开一段,那么它可以安置在前 \(j\) 段任意两段之间或者两侧,所以 \(f_{i,j} \times(j+1) \to f_{i+1,j+1}\)

  • 第 \(i+1\) 台电脑放入这 \(j\) 段当中,由于可以放在每一段的两侧,所以 \(f_{i,j} \times 2j \to f_{i+1,j}\)

对于 \(j\) 段电脑,那么就代表有 \(j-1\) 台电脑可以被自动开启,于是当 \(i+j-1=n\) 时,就可以统计答案。

code:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5050;
int f[N][N],n,mod,ans;
void add(int &a,int b){a+=b;if(a>mod) a-=mod;}
int main()
{
	scanf("%d%d",&n,&mod);f[1][1]=1;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
	    {
	    	if(i+j-1==n) add(ans,f[i][j]);
	    	add(f[i+1][j+1],1ll*f[i][j]*(j+1)%mod);
	    	add(f[i+1][j],1ll*f[i][j]*2*j%mod);
		}
	printf("%d\n",ans);
	return 0;
}

标签:手动,int,CF1515E,电脑,开启,插入法,include,dp,mod
From: https://www.cnblogs.com/ListenSnow/p/17248008.html

相关文章

  • C#-UDP协议通讯-UDPClientHelper-Net5
    一、UDPClinet知识点1、创建UDPClient客户端发送消息示例:///<summary>///开启并发送///</summary>///<paramname="iPAddress"......
  • expdp通过dblink远端导出
    sqlplus/assysdba;1、创建本地用户createuserxxxidentifiedbyxxxdefaulttablespaceNNC_DATA012、授权本地用户grantconnect,resource,dbatoxxx;3、本地......
  • 即时通讯技术文集(第10期):IM通信协议该选TCP还是UDP [共12篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第10 期。[-1-] 简述传输层协议TCP和UDP的区别[链接] http://www.52im.n......
  • 使用udp广播实现简单局域网群聊
    packagecom.iaiai.test;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;impo......
  • Spring线程池ThreadPoolTaskExecutor
    1.线程池配置@ConfigurationpublicclassTaskExecutorConfigimplementsAsyncConfigurer{@Value("${async.core.pool.size:10}")//核心线程数privateIn......
  • 记录:MDPI参考文献调整(Zotero)
    一参考文献格式字体大小常用格式三种:期刊,图书章节,会议,网址引用二选择zotero格式1.Stylerequest:MDPI(generalstyle)-ZoteroForums 打开链接,下拉,选择最新的......
  • Java ThreadPoolTaskExecutor 线程池的常见问题
    JavaThreadPoolTaskExecutor线程池的常见问题 https://blog.csdn.net/weixin_43611528/article/details/123083314 重要参数corePoolSize:核心线程数,常开的线程数,默......
  • Windows 系统下怎么获取 UDP 本机地址
    Windows系统下怎么获取UDP本机地址我们知道UDP获取远端地址非常简单,通常接口recvfrom就可以直接获取到远端的地址和端口;如果获取UDP的本机地址就需要点特殊处理......
  • 浅谈树形dp和优化
    树是一个由\(n\)个节点\(n-1\)条边所组成的无向无环连通图。由于每个节点只有一个父亲,可以消除在具体求解中的后效性。一般情况下,我们会采用dfs的方式一边遍历树一边......
  • 【数位DP】计数问题
    导读^_^数位DP数位DP,即是对数的每一位进行统计操作的DP问题。计数问题思路(分类讨论)首先,如果一遍遍枚举,显示是不行的,因为1e8次这样,明显会超时。这类问题的关键是......