首页 > 其他分享 >[CEOI2016] kangaroo题解

[CEOI2016] kangaroo题解

时间:2022-11-13 16:13:28浏览次数:80  
标签:int 题解 kangaroo CEOI2016 include rep dp MOD

P5999 [CEOI2016] kangaroo

一类插入式的dp。

对于这道题,我们得先做出一个转化,依次考虑每个数插到哪个位置,于是变成了求 \(1\)~\(n\) 的排列同时满足每个位置上的元素要么大于要么小于它左右两边的数的排列个数(当然还要满足 \(s\) 必须在排列首,\(t\) 必须在排列尾)。显然的插入dp,令 \(f_{i,j}\) 表示已经插到第 \(n\) 个数,同时有 \(j\) 个段,转移:

  • 当 \(i=s\) 或 \(i=t\) 时,\(f_{i,j}=f_{i-1,j-1}+f_{i-1,j}\)
  • 否则,\(f_{i-1,j+1}=f_{i-1,j+1} \times j + f{i-1,j-1} \times (j-(i>s)-(i>t))\)

解释:这一类以段为状态的插入dp,一般有

  • 在已有的段新增元。容易发现,如果不是在插入首或尾的数是会不合法的,所以这个转移仅在处理首尾元素。
  • 新开段。只需要注意下不要影响到固定的首尾。
  • 合并段。

code:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<iostream>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
typedef long long LL;
const int N=2e3+100;
const LL MOD=1e9+7;
int n,t,s;
LL f[N][N];

int main()
{
	scanf("%d%d%d",&n,&s,&t);
	f[0][0]=1ll;
	rep(i,1,n)
		rep(j,1,i)
			if(i==s||i==t)(f[i][j]=f[i-1][j-1]+f[i-1][j])%=MOD;
			else (f[i][j]=f[i-1][j+1]*j%MOD+f[i-1][j-1]*(j-(i>s)-(i>t))%MOD)%=MOD;
	printf("%lld",f[n][1]);
	return 0;
}

标签:int,题解,kangaroo,CEOI2016,include,rep,dp,MOD
From: https://www.cnblogs.com/onlycre/p/16886147.html

相关文章

  • P1858 多人背包 题解
    本题解灵感来源于题解P1858【多人背包】sto顾zorz本篇题解仅仅是对该题解的解释和说明。主要对原题解的解析部分加以补充:该文章中刷表的地方,是通过两个值去更新新......
  • 【题解】CSP-S2022 T2策略游戏
    简要题意有两串数A[1 n],B[1 m]A[1 n],B[1 m],有两个人小L和小QL和小Q,给出q组l1,r1,l2,r2q组l1,r1,l2,r2,对于每组,小L在A[l1 r1]A[l1 r1]中取一数x,小Q在B[l2 r2]B[l2......
  • Codeforces Round #833 (Div. 2) A-C题解
    比赛链接A、手摸不难发现,能做出的正方形大小就是当前的最大长度。所以直接输出向上取整即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineN......
  • CSP-J2022题解
    CSP-J2022题解T1乘方思路非常简单,直接for循环上就行了。为什么不会炸呢?因为就算a=1e9,乘两次也炸不了longlong。代码#include<cstdio>longlonga,n,ans=1;intmai......
  • 2022/11/12 模拟测题解
    2022/11/12模拟测题解A考场上推了一下,发现这个玩意挺有意思。一共有\((n+1)(m+1)\)个字符串,减去相同的个数,即可。这个相同的个数还是很好统计的,且这里指的相同仅仅是......
  • ACM-ICPC World Finals 2022 L Where Am I? 题解
    题目链接我们要干的事情其实是对于输入矩阵中的每个位置,求出从它开始至少走几步形成的序列能跟所有位置走同样步数形成的序列不同。注意到每个位置至少走\(200^2\)步就能......
  • ACM-ICPC World Finals 2022 L Where Am I? 题解
    题目链接我们要干的事情其实是对于输入矩阵中的每个位置,求出从它开始至少走几步形成的序列能跟所有位置走同样步数形成的序列不同。注意到每个位置至少走\(200^2\)步就能......
  • 题解 AGC036D【Negative Cycle】
    problem(fromluogu)有一个\(N\)个点的有向图,节点标号为\(0\sim(N-1)\)。这张图初始时只有\(N-1\)条边,每条边从\(i\)指向\(i+1\),边权为\(0\)。对于每一......
  • 题解 CF1051F【The Shortest Statement】
    problem连通图,无自环,无重边,\(m-n\leq20\),\(n\leq10^5\),\(10^5\)询问两点之间最短路。solution搞出任意一棵生成树。一共\(21\)条非树边。对于任意一条路径,它只有......
  • ABC277E 题解
    前言题目传送门!更好的阅读体验?非常套路的分层图,纪念赛时切掉了。思路我们以样例来解释。首先,这是最基础的图。我们把图分成两层:第一层是原本\(w=1\)的路可以通......