给定n个人,排成一个波浪形的队伍,n个人按个头高低已经编好号了。有个队长编号为m,队长是必须在最前面的,如果m=1..就不用管,否则队长后面那个要比他低...
读题坑,公式写了半天没推出来看了别人博客恍然大悟。
附上连接:点击打开链接
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 100000007
#define inf 0x3f3f3f3f
ull dp[55][55][2];
void db()
{
dp[1][1][0]=dp[1][1][1]=1;
for(int i=2;i<=50;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<i;k++)
{
if(k<j)
dp[i][j][1]+=dp[i-1][k][0];
else
dp[i][j][0]+=