The King’s Ups and Downs HDU - 4489(计数+dp)

题意

给你一个n问你对这n个人排列使得是波浪型的方案数有多少

题解

我们定义这n个人是1,2,3......n的从小到大的排列方式,当遍历到第i个人时,我们要将这个人插入到前面的i-1个人中,那么我们要怎么插入呢,假设我们插入的这个位置为k,那么k前面的两个人应该满足是下降的,后面的两个人应该是满足上升的,。然后就可以dp啦。

dp[i][0]表示有i个人满足最后两个人是下降的种数

dp[i][1]表示有i个人满足前面两个人是上升的种数

假设k前面有j个人,我们插入的位置应该是从0-i这个位置都能插入。

#include 

using namespace std;

typedef long long ll;

ll dp[22][22];
ll c[22][22];
int main()
{
	for(int i=1;i<22;i++)
	{
		c[i][0]=c[i][i]=1;
		for(int j=1;j>T;
	while(T--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		if(b==1) printf("%d 1\n",a);
		else printf("%d %lld\n",a,dp[b][1]+dp[b][0]);
	}
	return 0;
}

 

你可能感兴趣的:(DP)