SDOI2010 地精部落

题目描述

传说很久以前,大地上居住着一种神秘的生物:地精。

地精喜欢住在连绵不绝的山脉中。具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个[b][u]独一无二[/u][/b]的高度Hi,其中Hi是1到N之间的正整数。

如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰。位于边缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边)。

类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷。

地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中。地精的酒馆不论白天黑夜总是人声鼎沸,地精美酒的香味可以飘到方圆数里的地方。

地精还是一种非常警觉的生物,他们在每座山峰上都可以设立瞭望台,并轮流担当瞭望工作,以确保在第一时间得知外敌的入侵。

地精们希望这N段山脉每段都可以修建瞭望台或酒馆的其中之一,只有满足这个条件的整座山脉才可能有地精居住。

现在你希望知道,长度为N的可能有地精居住的山脉有多少种。两座山脉A和B不同当且仅当存在一个i,使得Ai≠Bi。由于这个数目可能很大,你只对它除以P的余数感兴趣。

输入输出格式

输入格式:

 

输入文件goblin.in仅含一行,两个正整数N, P。

 

输出格式:

 

输出文件goblin.out仅含一行,一个非负整数,表示你所求的答案对P取余之后的结果。

 

输入输出样例

输入样例#1:
4 7
输出样例#1:
3

说明

说明:共有10种可能的山脉,它们是:

1[u]3[/u]2[u]4[/u] 1[u]4[/u]2[u]3[/u] [u]2[/u]1[u]4[/u]3 2[u]3[/u]1[u]4[/u] 2[u]4[/u]1[u]3[/u]

[u]3[/u]1[u]4[/u]2 [u]3[/u]2[u]4[/u]1 3[u]4[/u]1[u]2[/u] [u]4[/u]1[u]3[/u]2 [u]4[/u]2[u]3[/u]1

其中加下划线的数位表示可以设立瞭望台的山峰,其他表示可以设立酒馆的山谷。

【数据规模和约定】

对于20%的数据,满足N≤10;

对于40%的数据,满足N≤18;

对于70%的数据,满足N≤550;

对于100%的数据,满足3≤N≤4200,P≤109。

 

题意:求波动序列的个数

首先,了解波动序列的对称性

序列如果为 1 4 2 5 3

对称序列为 5 2 4 1 3

如果原序列开始递减,那么同n+1减每个数,就变成了递减序列的对称递增序列

所以我们只需要求递减序列,乘2就是总个数

dp[i][j] 表示 前i个数的排列中,第1个数为j,且开始递减的序列个数

f[i][j] 表示 前i个数的排列中,第1个数为j,且开始递增的序列个数

当第1个数是j时,后面可以填1,2,3,……j-1,j+1,j+2……n

把>j的每个数-1,就是1,2,3,……j-1,j,j+1,j+2……n-1

即变成了n-1的排列

如果开始递减

当第1个数是j时,将>j的数全部-1,那么后面可以填的数就是一个n-1的排列

这个排列要求 第一个数<j,且开始递增

即dp[i][j]= Σ f[i-1][k]  k∈[1,j-1]

根据对称性,dp[i][j]= Σdp[i-1][k]  k∈[i-j+1,i-1] 

时间复杂度:O(n^3),空间复杂度:O(n^2)

使用前缀和优化,可以 优化到时间O(n^2),空间O(n)

 

没有用前缀和优化的代码:

#include<cstdio>
#define N 4201
using namespace std;
int n,p,ans;
int dp[N][N],sum[N];
int main()
{scanf("%d%d",&n,&p);for(int i=1;i<=n;i++) dp[1][i]=1;for(int i=2;i<=n;i++)for(int j=2;j<=i;j++)for(int k=i-j+1;k<=i-1;k++) dp[i][j]=(dp[i-1][k]+dp[i][j])%p;for(int i=1;i<=n;i++) ans=(ans+dp[n][i])%p;ans=ans*2%p;printf("%d",ans);
}

 

前缀和优化AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 4201
using namespace std;
int n,p,ans;
int dp[N],sum[N];
int main()
{scanf("%d%d",&n,&p);for(int i=1;i<=n;i++) dp[i]=1;for(int j=1;j<=n;j++) sum[j]=(sum[j-1]+dp[j])%p;for(int i=2;i<=n;i++){dp[1]=0; for(int j=2;j<=i;j++)  dp[j]=(sum[i-1]-sum[i-j]+p)%p;for(int j=i+1;j<=n;j++) dp[j]=0;for(int j=1;j<=n;j++) sum[j]=(sum[j-1]+dp[j])%p;}for(int i=1;i<=n;i++) ans=(ans+dp[i])%p;ans=ans*2%p;printf("%d",ans);
}

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7305170.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codechef Yet another cute girl

题意大概就是让你求一下[L,R]中的约数个数是素数的数的个数。 其中1<L<R<1e12,R-L<1e6. 然后我写了两种做法&#xff0c;第一种是可以直接搞出来L-R的约数个数&#xff0c;然后直接统计一下就好了。 这个的复杂度大致是 O((R-L) * log(R-L)) 第二种就是需要先发现满…

简单弄一个-个人主页

--- 整理一下已经发表的文章 JAVA基础 java基础数据结构之-红黑树(插入)java基础数据结构之-红黑树(删除)了解一下jdk动态代理的本质了解一下cglib动态代理的本质SpringBoot源码解析 前言&#xff1a;阅读springboot源码之前&#xff0c;最好对spring源码有一定的了解&#xff…

Halocn OCR识别入门学习

一、建立OCR库 dev_close_window() read_image(Image,OCR) get_image_size(Image,Width,Hight) dev_open_window(0,0,Width,Hight,black,Window) dev_display(Image)*字符处理 rgb1_to_gray(Image,ImageGray) *鼠标画你要找的roi区域 draw_rectangle1(Window,Row1,Column1,Row…

ctsc2009 移民站选址

分析&#xff1a;非常非常好的一道题&#xff01; 首先需要对问题进行转化&#xff1a; 行列无关&#xff0c;对于行单独处理&#xff0c;对于列单独处理必然存在一个最优方案使得每一个新站与旧站重合.转化1很显然&#xff0c;对于转化2&#xff0c;是一类非常经典的“中位数问…

Jenkins 安装与使用--实例

參考了博客Jenkins master在windows上安装 Jenkins的主要功能是监视反复工作的运行&#xff0c;比如软件project的构建详细地&#xff1a; *软件的持续构建和測试 本质上提供了一个易于使用的持续集成系统。使得开发者更easy地将改变集成到project中。使得用户更easy获得一个…

后端项目搭建技术栈

Koa2&#xff1a;koa-bodyparser koa-router koa-session koa-corsTypeScript数据库&#xff1a;Mysql &#xff08;库&#xff1a;Sequelize&#xff09;表单验证库&#xff1a;Joi

C# 实体类几种深拷贝的方法——解决关于对象赋值,A=B,A改变,B也改变问题

几种常见的深拷贝方式 1、利用反射实现 public static T DeepCopyByReflection<T>(T obj) {   if (obj is string || obj.GetType().IsValueType)   return obj; object retval Activator.CreateInstance(obj.GetType());   FieldInfo[] fields obj.GetType().…

Hadoop学习之路(九)HDFS深入理解

HDFS的优点和缺点 HDFS的优点 1、可构建在廉价机器上 通过多副本提高可靠性&#xff0c;提供了容错和恢复机制 服务器节点的宕机是常态 必须理性对象 2、高容错性 数据自动保存多个副本&#xff0c;副本丢失后&#xff0c;自动恢复 HDFS的核心设计思想&#xff1a; 分散均匀…

关于Unity中的声音管理模块(专题七)

声音的要素 1: 音频文件AudioClip2: 音源AudioSource;3: 耳朵AudioListener;//全局只能有一个4: 2D/3D音频;//2D只是简单地播放声音&#xff0c;3D可以根据距离衰减音量 怎样听到声音&#xff1a; 创建一个节点&#xff0c;挂载AudioSource组件&#xff0c;AudioSource组件关联…

重启唯一的窗体实例,以及调用系统重启函数失败解决办法

1、修改Program.cs内的程序启动函数 static class Program{public static System.Threading.Mutex Instance;/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTe…

ThreadLocal可能引起的内存泄露

threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存在这些引用. 看下图: 实线代表强引…

codevs 1576 最长严格上升子序列

题目链接&#xff1a;http://codevs.cn/problem/1576/题目描述 Description给一个数组a1, a2 ... an&#xff0c;找到最长的上升降子序列ab1<ab2< .. <abk&#xff0c;其中b1<b2<..bk。 输出长度即可。 输入描述 Input Description第一行&#xff0c;一个整数N。…

nginx服务器开启缓存、反向代理

一、反向代理配置 1、反向代理服务器配置如下 反向代理就是需要这一行proxy_pass来完成。当我们要访问后端web服务器的时候&#xff0c;我们只需要访问代理服务器就可以了&#xff0c;此时代理服务器就充当后端web服务器的角色。proxy_pass依赖的模块是&#xff1a; 至于后两行…

Halcon:区域特征:select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

Region特征一览&#xff1a; 特征 英 译 备注 area Area of the object 对象的面积 row Row index of the center 中心点的行坐标 column Column index of the center 中心点的列坐标 width Width of the region 区域的宽度 height Height of the…

Web应用主动侦测工具Skipfish

Web应用主动侦测工具SkipfishSkipfish是Kali Linux附带的一个主动Web应用侦测工具。该工具会首先尽可能获取所有网站路径&#xff0c;进行访问&#xff0c;然后根据返回的内容&#xff0c;检测是否存在漏洞。该工具采用字典爆破和网页爬行两种方式获取网站。一旦获取网页内容&a…

7步让你get首个数据科学实习

由于数据科学的庞大和复杂&#xff0c;如果你没有相关的实习经历的话&#xff0c;成为数据科学家的道路将会更加艰巨和困难。即使是经验丰富的人&#xff0c;实习也是转型进入数据科学领域的一种有效方式。 那么&#xff0c;寻找数据科学实习有哪些技巧&#xff1f;本文总结了数…

Halcon:Image、region、xld常用的处理

一、读取文件夹中的所有图片 list_files (C:/Users/fuping.liu/Desktop/槟榔有无头/有头, [files,follow_links], ImageFiles) tuple_regexp_select (ImageFiles, [\(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$,ignore_case], ImageFiles)for Index :…

赛码网算法: 上台阶 ( python3实现 、c实现)

上台阶 题目描述 有一楼梯共m级&#xff0c;刚开始时你在第一级&#xff0c;若每次只能跨上一级或二级&#xff0c;要走上第m级&#xff0c;共有多少走法&#xff1f;注&#xff1a;规定从一级到一级有0种走法。 输入…

Halcon: 畸变矫正与标定(1)

1、 Halcon相机标定和图像矫正 对于相机采集的图片&#xff0c;会由于相机本身和透镜的影响产生形变&#xff0c;通常需要对相机进行标定&#xff0c;获取相机的内参或内外参&#xff0c;然后矫正其畸变。相机畸变主要分为径向畸变和切向畸变&#xff0c;其中径向畸变是由透…

conda install 出错

在下载包时出现下面的错误&#xff1a; userdeMBP:pytorch user$ conda install -n deeplearning matplotlib Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/osx-64/repodata.json.bz2> Elapsed…