SDOI 2010 and SXOI 2014 地精部落 (递推)

用E[i,j]表示共有i个数字,以1..j开头且一开始下降的方案数的总和。则我们有:

E[i,j]:=E[I,J-1]+E[i-1,i-j]

我们先来证明上升与下降的方案是一一对应的。

事实上,若有a1,a2,a3,……,an 为满足要求的一个序列(上升或下降),

则我们构造新数列,n+1-a1,n+1-a2,n+1-a3,……,n+1-an 这个数列也满足要求(下降或上升)。

而且这种对应是一一对应的,其正确性是显然的。

令f[i,j]表示共i个数字,以j开头的下降的方案数

令g[i,j]表示共i个数字,以j开头的上升的方案数

则我们有f[i,j]:=g[i,i+1-j](因为它们是一一对应的)。

所以f[i,j]=g[i-1,j-1]+g[i-1,j-2]+……+g[i-1,1]

=f[i-1,i-j+1]+f[i-1,i-j+2]+……+f[i-1,i-1]

=E[i-1,i-1]-E[i-1,i-j]

于是E[i,j]:=E[i,j-1]+f[i,j]=E[i,j-1]+E[i-1,i-1]-E[i-1,i-j];


var i,j,n,p,x:longint;
f:array[0..1,0..4500] of longint;
begin
readln(n,p);
f[1,1]:=1;x:=1;
for i:=2 to n do
begin
x:=1-x;
for j:=1 to i do
begin
f[x,j]:=f[x,j-1]+f[1-x,i-j];
if f[x,j]>=p then dec(f[x,j],p);
end;
end;
if n=1 then writeln(1)
else writeln(f[n mod 2,n]*2 mod p);
end.

SDOI 2010 and SXOI 2014 地精部落 (递推),布布扣,bubuko.com

时间: 2024-10-05 07:30:45

SDOI 2010 and SXOI 2014 地精部落 (递推)的相关文章

斐波那契 递推算法

/***Date : 2014.12.10***/ //递推算法:是理性思维模式的代表,根据已有的数据和关系,逐步推导而得出结果. //执行过程:1)根据已知的结果和关系,求解中间结果. ///////////////////// 2)判断是否满足要求,若未满足,则继续根据已知结果和关系求解中间结果:若满足要求,则表示寻找到一个正确答案. //13世纪,意大利数学家斐波那契的<算盘书>中记载:兔子产仔问题. //一对两个月大的兔子,每月都可产仔一对,小兔子两月后的每月也可产仔一对;即1月生,3

【SDOI】【DP】【滚动数组】【bzoj1925】地精部落

1925: [Sdoi2010]地精部落 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 814  Solved: 494 [Submit][Status][Discuss] Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数. 如果一段山脉比所有与它相邻的山脉都高,则

[bzoj1925][Sdoi2010]地精部落_递推_动态规划

地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 原文地址:https://www.cnblogs.com/ShuraK/p/9032651.html

【bzoj1925】地精部落[SDOI2010](dp)

题目传送门:1925: [Sdoi2010]地精部落 这道题,,,首先可以一眼看出他是要我们求由1~n的排列组成,并且抖来抖去的序列的方案数.然后再看一眼数据范围,,,似乎是O(n^2)的dp?然后各种撕烤,,,然而还是不会... 对于这道题,我第一眼的想法是用f[i][j]表示长度为i,最后一个数是j的抖动序列的方案数,然而这是个1~n的排列,似乎没法解决数字重复的问题..QAQ 于是看了一波题解,,,原来这个dp是这样子搞的:用f[i][j]表示i个数的排列.第一个数<=j且开头下降的抖动序

bzoj1925 [[Sdoi2010] 地精部落【DP】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 一个多月前"过"了这道题,还自欺欺人地认为懂了这道题,这直接导致了昨晚多校联测2的T3爆炸,现在想来简直是道水题,不过还是要有"懂得这题怎么做"的前提...地精部落这道题可以约化为另一个问题:对于n的排列,告诉你每个数相比于前一个数是大了.小了.还是都可以,求这样的排列的方案数. 先说这一题叭,看过很多其他人的题解,依然是云里雾里,因此我会写的详细一点.

2014 BNU 邀请赛E题(递推+矩阵快速幂)

Elegant String 题意:给定一个字符串,由0-k数字组成,要求该串中,子串不包含0-k全排列的方案数 思路:dp[i][j]表示放到i个数字,后面有j个不相同,然后想递推式,大概就是对应每种情况k分别能由那几种状态转移过来,在纸上画画就能构造出矩阵了,由于n很大,所以用快速幂解决 代码: #include <stdio.h> #include <string.h> const long long MOD = 20140518; int t; long long n; i

1925: [Sdoi2010]地精部落

1925: [Sdoi2010]地精部落 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1401  Solved: 869[Submit][Status][Discuss] Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数. 如果一段山脉比所有与它相邻的山脉都高,则这

【bzoj1925】[Sdoi2010]地精部落 组合数学+dp

题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数. 如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰.位于边 缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边). 类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷. 地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中.地精的酒馆 不论白天黑夜总

BZOJ 1925: [Sdoi2010]地精部落( dp )

和几天前校内的某场NOIP模拟赛T3一模一样... dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满足题意且开头是下降的序列 dp(i,j) = dp(i,j-1) + dp(i-1,i-j+1). 前一个好理解, 就是求排列i, 1~j-1开头的, 后一种就是求以j开头, 那么原来的排列i-1应该以1~j-1开头, 但是开头又得是上升的(这样加