传送门

dp好题。


设f[i][j]f[i][j]f[i][j]表示iii个数结尾是jjj且结尾两个数递增的方案数。

那么显然可以对称的定义出g[i][j]g[i][j]g[i][j]表示iii个数结尾是jjj且结尾两个数递减的方案数。

那么显然有f[i][j]=g[i][i−j+1]f[i][j]=g[i][i-j+1]f[i][j]=g[i][i−j+1](考虑把第一个序列中每个数k都变成i-k+1)

且Ans=∑i=1n(f[n][i]+g[n][i])=2∗∑i=1nf[n][i]Ans=\sum _{i=1} ^n(f[n][i]+g[n][i])=2*\sum _{i=1} ^nf[n][i]Ans=∑i=1n​(f[n][i]+g[n][i])=2∗∑i=1n​f[n][i]

由于f[i][j]=∑k=1j−1g[i−1][k]f[i][j]=\sum _{k=1} ^{j-1} g[i-1][k]f[i][j]=∑k=1j−1​g[i−1][k]

=>f[i][j]=∑k=1j−1f[i−1][i−1−k+1]f[i][j]=\sum _{k=1} ^{j-1} f[i-1][i-1-k+1]f[i][j]=∑k=1j−1​f[i−1][i−1−k+1]

=>f[i][j]=∑k=1j−1f[i−1][i−k]f[i][j]=\sum _{k=1} ^{j-1} f[i-1][i-k]f[i][j]=∑k=1j−1​f[i−1][i−k]

=>f[i][j]=∑k=i−j+1i−1f[i−1][k]f[i][j]=\sum _{k=i-j+1} ^{i-1} f[i-1][k]f[i][j]=∑k=i−j+1i−1​f[i−1][k]

=>f[i][j−1]=∑k=i−j+2i−1f[i−1][k]f[i][j-1]=\sum _{k=i-j+2} ^{i-1} f[i-1][k]f[i][j−1]=∑k=i−j+2i−1​f[i−1][k]

=>f[i][j]−f[i][j−1]=f[i−1][i−j+1]f[i][j]-f[i][j-1]=f[i-1][i-j+1]f[i][j]−f[i][j−1]=f[i−1][i−j+1]

=>f[i][j]=f[i][j−1]+f[i−1][]i−j+1f[i][j]=f[i][j-1]+f[i-1][]i-j+1f[i][j]=f[i][j−1]+f[i−1][]i−j+1

推导真妙啊。

注意要特判只有一个的情况。

以及要用滚动数组优化空间233

代码:

#include<bits/stdc++.h>
#define N 4205
using namespace std;
int f[2][N],p,n,ans=0,tmp=0;
int main(){
	scanf("%d%d",&n,&p);
	if(n==1)return cout<<1,0;
	f[tmp][1]=1;
	for(int i=2;i<=n;++i){
		tmp^=1;
		for(int j=1;j<=i;++j)f[tmp][j]=(f[tmp][j-1]+f[tmp^1][i-j+1])%p;
	}
	for(int i=1;i<=n;++i){
		ans+=f[tmp][i];
		if(ans>=p)ans-=p;
	}
	ans<<=1;
	if(ans>=p)ans-=p;
	cout<<ans;
	return 0;
}

最新文章

  1. The best career advice I’ve received
  2. Java 枚举&amp;注解
  3. 插值和空间分析(二)_变异函数分析(R语言)
  4. Mapreduce读取Hbase表,写数据到多个Hbase表中
  5. linux后端运行
  6. ActiveMQ之 TCP通讯机制
  7. html-----012---颜色的改变
  8. cf467C George and Job
  9. 最新版SDWebImage的使用
  10. CentOS 6.8重新安装yum
  11. node多版本管理--nvmw
  12. 1、C#基础 - C# 语言简介
  13. 洛谷 [P2756] 飞行员配对方案问题
  14. Universal-Image-Loader 图片异步加载类库的使用
  15. Beta冲刺(4/7)
  16. Jumpserver之安装在CentOS主机步骤
  17. STM32F103引脚功能定义
  18. 学习Git笔记(更新中)
  19. java实现字符串和LIST,MAP转换
  20. 潭州课堂25班:Ph201805201 django 项目 第四十六课 查错 补缺 (课堂笔记

热门文章

  1. bootstrap修改勾选样式
  2. JAVA 整合 SSM (Spring + SpringMVC + MyBatis)
  3. MVC控制器详解
  4. Linux 如何将一个文件夹的所有内容授权给某一个用户
  5. [ERR] Not all 16384 slots are covered by nodes.
  6. 软件工程导论复习 如何画系统流程图和数据流图 part1
  7. spark性能调优 数据倾斜 内存不足 oom解决办法
  8. SpringDataJPA模糊查询遇到的坑
  9. Python3 ssl模块不可用的问题
  10. conductor FAQ