首页 > 其他分享 >P2467 地精部落 题解

P2467 地精部落 题解

时间:2022-10-07 17:13:28浏览次数:46  
标签:第一位 部落 int 题解 P2467 第二位 dp

P2467 地精部落 题解

比较恶心的一道线性dp。

要求1~N的排列,满足a[i-1]<a[i]>a[i+1]或a[i-1]>a[i]<a[i+1],求这样的排列的个数。

既然是线性dp,那么状态一定和长度有关,一维的状态是否能解决呢?

思考后发现不行,由于很难直接从f[i-1]推出f[i](实际上可以用组合数搞出来),考虑改用二维。定义\(f_{i,j}\)为1~i的排列,以j为开头且为山峰的方案数。

得到状态转移方程\(f_{i,j}=f_{i,j-1}+f_{i-1,i-j+1}\)这个转移方程应该如何理解呢?

首先\(f_{i,j}\)由两部分组成:第二位是j-1和第二位不是j-1的情况。

  • 如果第二位不是j-1,可以直接把\(f_{i,j-1}\)里的j-1全部和j调换;
  • 如果第二位是j-1,那么考虑第一位为山谷的j-1,长度为i-1的方案数。
  • 第一位为山谷的数列的个数怎么求呢?我们发现\(f_{i-1,i-j+1}\)中的每一个序列都可以通过取每一位与i的差值得到那么考虑第一位为山谷的j-1,长度为i-1的方案,所以把它写进转移方程。
#include<bits/stdc++.h>
using namespace std;
int f[2][5005];
int n,q;
int main(){
	cin>>n>>q;
	f[0][2]=1;//边界条件
	for(int i=3;i<=n;i++){
		for(int j=2;j<=i;j++){
			f[i&1][j]=(f[i&1][j-1]+f[(i-1)&1][i-j+1])%q;
		}
	} 
	int ans=0;
	for(int j=2;j<=n;j++){
		ans=(ans+f[n&1][j])%q;
	}
	cout<<ans*2%q<<endl;
} 

标签:第一位,部落,int,题解,P2467,第二位,dp
From: https://www.cnblogs.com/Hushizhi/p/16760080.html

相关文章

  • 答题比赛难题解析(2)
    1、以下说法中正确的个数是():1)实体-关系图和数据流图也可以描述分析模型2)和设计工作流的对象相比较,分析工作流的对象的特点是仅存在于内存中,不保存到硬盘3)每个用例映......
  • 答题比赛难题解析(1)
    1、针对某组织流程的改进,以下列出的措施中,可以采取的个数是()1)引进新的业务实体取代现有业务工人的责任2)在现有业务实体上增加新的责任3)引进新的业务工人取代现有业......
  • 「题解」Codeforces 1313E Concatenation with intersection
    考虑这个\(l_1\)一定是\(s\)的开头,\(r_2\)一定是\(t\)的结尾,那么就考虑假如固定了\(l_1,r_2\)之后怎么计算对答案的贡献。一个河狸的想法是,固定\(l_1\)之后可......
  • luogu P6155 修改题解
    P6155题解闲话这是本蒟蒻写的第三篇题解了,前两篇都因为种种原因报废了,求管理过╥﹏╥正片大家好,我是一名STL选手,于是我用了大量STL+O2的代码过了这道题分析我的代码与......
  • JavaWeb505错误,IDEA版问题解决
    问题描述:在学习JavaWeb的过程中,使用JSP文件转至servlet文件的过程中,发现无论如何都无法打开文件JSP文件代码<%@pagecontentType="text/html;charset=UTF-8"%><!DOCTY......
  • SPOJ6059 GCDSQF Another GCD Problem 题解
    题目大意给定两个square-freenumber\(A\)和\(B\)(即没有一个素因子的次数达到\(2\)的数)的01表示形式(即将其有无该素因子排列出来,如\(105=3\times5\times7\),则......
  • [AHOI2022] 钥匙 题解(超详细解密)
    前言青蛙。树上ds好题,运用了很多巧妙的树上问题处理策略。难度2700。题意简述给定一棵\(n\)个点的树,每个节点上要么有一把钥匙,要么有一个宝箱,且钥匙和宝箱都是有颜......
  • CF1256E. Yet Another Division Into Teams 题解 单调队列优化dp
    题目链接:https://codeforces.com/contest/1256/problem/E将\(n\)个数分成若干队,每一队至少包含\(3\)个整数,每一队的代价是最大值与最小值只差,求所有队伍代价之和的最......
  • CF472D题解
    原题CF472DDesignTutorial:InversetheProblem思路概述题意分析给定一个\(n\)点无向图的两两点对之间距离,即经过最短路算法后的邻接矩阵,要求判断原图是否为一个......
  • Educational Round 30 题解
    ContestLink虽然是unrated,不过秉持着EducationalRound的传统,题还是挺不错的。A.ChoresProblemLink评价:善用STL。由于\(a\)已经排好序了,且\(x\le\min_{i=1......