[Sdoi2010] 地精部落

F. 地精部落

题目描述

传说很久以前,大地上居住着一种神秘的生物:地精。 地精喜欢住在连绵不绝的山脉中。具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数。 如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰。位于边 缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边)。 类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷。 地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中。地精的酒馆 不论白天黑夜总是人声鼎沸,地精美酒的香味可以飘到方圆数里的地方。 地精还是一种非常警觉的生物,他们在每座山峰上都可以设立瞭望台,并轮 流担当瞭望工作,以确保在第一时间得知外敌的入侵。 地精们希望这N 段山脉每段都可以修建瞭望台或酒馆的其中之一,只有满足 这个条件的整座山脉才可能有地精居住。 现在你希望知道,长度为N 的可能有地精居住的山脉有多少种。两座山脉A 和B不同当且仅当存在一个 i,使得 Ai≠Bi。由于这个数目可能很大,你只对它 除以P的余数感兴趣。

输入格式

仅含一行,两个正整数 N, P。

输出格式

仅含一行,一个非负整数,表示你所求的答案对P取余 之后的结果。

样例

样例输入

4 7

样例输出

3

数据范围与提示

image
对于 20%的数据,满足 N≤10;
对于 40%的数据,满足 N≤18;
对于 70%的数据,满足 N≤550;
对于 100%的数据,满足 3≤N≤4200,P≤10^99​​

大佬们都说这道题是水题,然而我貌似搞了一天,其实开始就想出来了一个n3的算法,但是肯定会T,我以为是个组合数的题,就去想其他解法了,然而那个n3再改一下就是正解了……

题解:

f[i][j][0]表示考虑前i段,前i个数,第i段为j且为山谷,f[i][j][1]第i段为j且为山峰。那么f[i][j][0]=∑f[i-1][k][1];(j<k<i)。

这样是n3怎么优化呢?可以发现f[i][j][0]与f[i][i-j+1][1]是一一对应的(相当于是把原来的山峰变成了山谷,山谷变成了山峰),不明白可以去手膜样例。所以f[i][j][0]=∑f[i-1][i-k+1][0](j+1<=k<i)=∑f[i-1][k][0](1<=k<=i-j);

其实后面的0就完全可以去掉了:f[i][j]=∑f[i-1][k](1<=k<=i-j),那么可以用一个变量辅助dp,就可以变为n2了。

1 for(int i=2;i<=n;i++)
2 {
3     tem=0;
4     for(int k=1;k<=i-1;k++)   
5         tem=(tem+f[i-1][k])%p;
6     for(int j=1;j<=i;j++)
7         f[i][j]=tem,tem=((tem-f[i-1][i-j])%p+p)%p;
8 }

 

最后答案为(∑f[n][i])*2,因为最后一个点为山峰和山谷的方案数是一样的,乘2即可。

#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
LL n,p;
LL f[4210][4210];
signed main()
{scanf("%lld%lld",&n,&p);LL tem=0,ans=0;f[1][1]=1;for(int i=2;i<=n;i++){tem=0;for(int k=1;k<=i-1;k++)   tem=(tem+f[i-1][k])%p;for(int j=1;j<=i;j++)f[i][j]=tem,tem=((tem-f[i-1][i-j])%p+p)%p;}for(int i=1;i<=n;i++)ans=(ans+f[n][i])%p;ans=(ans+ans)%p;cout<<ans<<endl;
}

 但是这样在bzoj上A不了,要用滚动数组;

#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
LL n,p,tem=0,ans=0;;
LL f[2][4210];
signed main()
{scanf("%lld%lld",&n,&p);f[1][1]=1;for(int i=2;i<=n;i++){tem=0;for(int k=1;k<=i-1;k++)   tem=(tem+f[(i-1)%2][k])%p;for(int j=1;j<=i;j++)f[i%2][j]=tem,tem=((tem-f[(i-1)%2][i-j])%p+p)%p;for(int k=0;k<=n;k++)f[(i-1)%2][k]=0;}for(int i=1;i<=n;i++)ans=(ans+f[n%2][i])%p;ans=(ans+ans)%p;cout<<ans<<endl;
}

 

转载于:https://www.cnblogs.com/Al-Ca/p/11120516.html

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

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

相关文章

怎么判断冠词用a还是an_英文写作常见错误学习笔记 | 冠词

写在前面的话在知乎中看到“英文学术论文写作&#xff0c;有什么好书可以推荐”话题中有人推荐了香港大学出版社Steve Hart写的《English Exposed》一书&#xff0c;从副标题“Common Mistakes Made by Chinese Speakers”可以看出书是针对中国人常犯的错误而写的&#xff0c;作…

工厂模式 构建者模式_实践中的构建者模式

工厂模式 构建者模式我将不深入讨论该模式&#xff0c;因为已经有大量的文章和书籍对此进行了详细的解释。 相反&#xff0c;我将告诉您为什么以及何时应该考虑使用它。 但是&#xff0c;值得一提的是&#xff0c;这种模式与《 四人帮》一书中介绍的模式有些不同。 虽然原始模式…

python 反复访问迭代器iter,反复使用next

python 反复访问迭代器iter&#xff0c;反复使用next test [1, 2, 3]# 定义迭代器 iter_test iter(test)# 使用for循环访问迭代器 # 由于next()只向前走&#xff0c;所以当跌代到test最后一个值3之后&#xff0c;就会爆发异常StopIteration # 这里使用了一个try语句&#xf…

PPT转PDF方法

引用&#xff1a; using Microsoft.Office.Interop.PowerPoint;方法&#xff1a; ///<summary> /// PPT转PDF ///</summary> ///<param name"sourcePath">源文件路径</param> ///<param name"targetPath&qu…

打印容器_3D打印:增材点阵结构在压力容器优化设计中的应用

“增材制造是未来制造业的发展趋势&#xff0c;其优势显而易见&#xff0c;它可以实现传统加工工艺难以制造的设计&#xff0c;比如复杂薄壁结构、点阵结构、一体化结构等。其中&#xff0c;点阵结构作为一种新型的轻量化结构&#xff0c;具有良好的比刚度、比强度等力学性能。…

Java平台模块系统公众审查未能通过

在过去的几周里&#xff0c;Java世界中的戏剧&#xff0c;阴谋和政治活动异常高涨&#xff0c;最终在本周的JSR 376 Java平台模块系统公共评审投票中达到了顶峰。 Java模块化&#xff08;包括Java平台模块系统&#xff08;JPMS&#xff09;&#xff09;可以说是JDK 9最重要的部…

区间素数个数查询

给出一个闭区间的两端l和r&#xff0c;输出[l,r]中素数的个数。 输入格式: 两个整数l和r&#xff0c;之间用空格隔开&#xff08;1<l<r<10000&#xff09;。 输出格式: 输出一个结果。 输入样例: 2 10输出样例: 4 import java.util.Scanner;public class Main {static…

jtabel 遍历_使用抽象表模型获取JTable中选定的行

在下面的示例中&#xff0c;TableModel更新Set checked在执行setValueAt()..相邻模型JList侦听表的模型并显示当前选定的行号。该示例假定所选行数与行数相比较小。注意使用TreeSet&#xff0c;其迭代器保留了元素的自然顺序。import java.awt.Dimension;import java.awt.Event…

neo4j cypher_优化Neo4j Cypher查询

neo4j cypher上周&#xff0c;我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询&#xff08;36866ms至155575ms&#xff09;。 经过一番尝试和错误&#xff0c;以及来自Michael的大量投入&#xff0c;我能够大致确定对查询进行哪些操作才能使它们性能…

Mac--PHP已经开启gd扩展验证码不显示

错误显示&#xff1a;Call to undefined function imagettftext() 原因&#xff1a; mac系统中自带的php的gd库中&#xff0c;缺少对freetype的支持&#xff0c;导致图片无法显示。 解决&#xff1a; 1 下载freetype&#xff0c;安装即可 下载地址&#xff1a;https://download…

cprintdialog预览_怎样用CPrintDialog来实现打印功能

把以下程序段加入你的程序把dc1当作Device Content.就任你打印了.注意别画错地方.自己换页.更绝的是可调用窗口的OnPrint或OnDraw成员函数直接打印.不用你去做行距多少啦!但别忘换页.// 打印// 建立打印对话框对象CPrintDialoghttp://www.gaodaima.com/?p65323怎样用CPrintDia…

容器中Java RAM的使用:不会丢失内存的5大技巧

在本文中&#xff0c;我们希望分享Java内存管理的细节和容器内部的弹性&#xff0c;这些细节乍一看并不明显。 在下面&#xff0c;您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新&#xff0c;以及针对核心痛点的现有解决方法。 我们收集了5个最有趣&#xff0c;最…

G1垃圾收集器设计目标与改良手段【纯理论】

在之前已经详细对CMS垃圾回收器进行了学习&#xff0c;今天准备要学习另一个全新的垃圾收集器---G1&#xff08;Garbage First Collector 垃圾优先的收集器&#xff09;&#xff0c;说是一种全新的&#xff0c;其实G1垃圾收集器已经出现了N多年了&#xff0c;只是从发展到成熟是…

centos7安装es mysql_Centos7 安装MySQL详细步骤

Centos7 安装MySQL详细步骤首先在虚拟机中安装一个Centos7(VM虚拟机安装Centos7)1.1 MySQL安装1.1.1 下载wget命令yum -y install wget11.1.2 在线下载mysql安装包wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm11.1.3 安装MySQLrpm -ivh mysql57…

Mac入门--通过homebrew下载过慢问题

使用国内的镜像替换homebrew镜像&#xff0c;对镜像进行加速源 原先我们执行brew命令安装的时候&#xff0c;跟3个仓库地址有关 1 brew.git 2 homebrew-core.git 3 homebrew-bottles 把三个仓库地址全部替换成国内Alibaba提供的地址 1 替换/还原brew.git仓库地址 # 替换成阿里…

在卷积层的运用_Conv 卷积层

onv 卷积层一.why CNN for image ? 1.Some Patterns are much smaller than the whole image.一些模式比起整张图片来说更小&#xff0c;即寻找模式不用看完整的图像。2.The same patterns appear in different regions.同一个模式可能会出现在不同的区域。3.Subsamping the p…

idea 编写javafx_用JavaFX编写图块引擎

idea 编写javafx随着JavaFX嵌入式版本的问世&#xff0c;我们的框架对于游戏开发变得越来越有趣&#xff0c;因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备。 因此&#xff0c;我决定对JavaFX进行更多的游戏编写实验。 这次&#xff0c;我想使用Canvas对渲染进行更多…

C#/.Net操作MongoDBHelper类

先 NuGet两个程序集 1:MongoDB.Driver、 2:MongoDB.Bson namespace ConsoleApp1{ /// <summary> /// MongoDb帮助类 /// </summary> /// <summary> /// MongoDb帮助类 /// </summary> public class DB { private static readonly string connStr &q…

echo回声不能用了_已懂得用电子分频器,为何不继续加个效果器让音响效果更好?...

效果器是一种提供各种声场效果&#xff0c;并对声音信号在时间和频率等多方面多方位进行加工处理以产生特殊音响效果的周边设备&#xff0c;它广泛使用在电台、电视台的节目制作上。然而要充分发挥效果器的作用&#xff0c;使其获得满意的效果&#xff0c;还必须掌握正确的连接…

Spring Web-Flux – Cassandra后端的功能样式

在上一篇文章中&#xff0c;我介绍了Spring Web-Flux的基础知识&#xff0c;它表示Spring框架的Web层中的响应式支持。 我已经展示了使用Spring Data Cassandra并在Spring Web Layers中使用传统注释支持的端到端示例&#xff0c; 大致如下&#xff1a; ... import org.spring…