[4.27] T3-地铁重组

题目大意

N N 元素位于 a a 栈中,要将这些元素通过 b b 栈,转移到 c c

求转移到 c c 栈后有多少种不同的排列顺序,答案对 4096 4096 m o d mod

题目解析

由于存储过程只有两种操作:
1 1、 将一个元素加入中转栈中
2 2、 将中转栈的一个元素加入目标栈

f [ i ] [ j ] ( i + j < = n ) f[i][j] (i+j<=n) a a 栈中有 i i 个元素, b b 栈中有 j j 个元素的方法数( c c 栈中有 n i j n-i-j 个元素)

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

初始状态 f [ n ] [ 0 ] = 1 f[n][0]=1 ,目标状态 f [ 0 ] [ 0 ] f[0][0]

代码

#include<bits/stdc++.h>
using namespace std;
int n,p;
int f[2005][2005];
int main()
{
	scanf("%d%d",&n,&p);
	f[n][0]=1;
	for(int i=n-1;i>=0;i--)
	 for(int j=min(n-i,p);j>=0;j--)
	  f[i][j]=(f[i+1][j-1]+f[i][j+1])%4096;
	printf("%d",f[0][0]);
}

猜你喜欢

转载自blog.csdn.net/weixin_43909855/article/details/89601795