CCPC-Wannafly Winter Camp Day4 (Div2, onsite) G 置置置换

题目描述

 

wlswls有一个整数nn,他想请你算一下有多少1...n1...n的排列(permutation)满足:对于所有的i(2 \le i \le n)i(2≤i≤n),若ii为奇数,则a[i - 1] &lt; a[i]a[i−1]<a[i],否则a[i - 1] &gt; a[i]a[i−1]>a[i]。请输出答案mod 1e9 + 7。

输入描述

 

一行一个整数nn。

1 \le n \le 10001≤n≤1000

输出描述

 

一行一个整数表示答案。

样例输入 1 

3

样例输出 1

2

//在i为偶数时候,我们k是从j->i-1。这里解释以下
//正常k是从j+1->i,这里我们来举个例子
//假设一个排列{1,3,2},那么dp[4][2]是要把2放在最后面,那么我们可以把排列中
//大于等于2的数加1即得到排列{1,4,3},这样不会改变关系,再把2放进去就得到{1,4,3,2}了。
//所以我们要求dp[i][j]=(dp[i-1][i-1]+.....+dp[i-1][j]) 当i是偶数时候
//因为上一次排列中大于j的数都隐性加了1(实际没加),但是不改变关系
//所以我们k是从j->i-1.
//dp[4][1]=dp[3][1]+dp[3][2]+dp[3][3] (dp[3][1]的情况+dp[3][2]的情况+dp[3][3]的情况)

可以用前缀和优化一个On。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int MOD = 1e9 + 7;
typedef long long ll;
ll dp[1010][1010];
int sum[maxn];
int main() 
{
	//freopen("C://input.txt", "r", stdin);
	int n;
	scanf("%d", &n);
	dp[1][1] = 1;
	for (int i = 2; i <= n; i++) 
	{
		for (int j = 1; j <= i; j++) 
		{
			if (i & 1)//奇数,升序 从1->(j-1)转移
			{
				for (int k = 1; k <= j-1 ; k++)
				{
					dp[i][j] =dp[i][j]%MOD + dp[i - 1][k]%MOD;
				}
			}
			//dp[i][j] = (dp[i][j - 1] + dp[i - 1][j - 1] + MOD) % MOD;//前缀和优化
			else 
			{
				//偶数,降序 从j -> i-1转移
				for (int k = j; k<=i-1; k++)
				{
					dp[i][j] = dp[i][j] % MOD + dp[i - 1][k] % MOD;
				}
				//dp[i][j] = (dp[i][j - 1] + dp[i - 1][i - 1] - dp[i - 1][j - 1] + MOD) % MOD;
			}
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		ans =ans%MOD+ dp[n][i]%MOD;
	}
	printf("%d\n", ans);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值