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.pswp.cn/news/252154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252154.shtml
英文地址,請注明出處:http://en.pswp.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…