NOI:1996 登山
題解:動態規劃,兩段最長上升序列,0-k以k結尾的最長上升序列和k-n以k為起點的上升序列兩端和最大
掌握最長上升子序列的求法,即以ak為終點的最長上升子序列
注意:題目中說一旦下山就不能再上山,所以要分成上山和下山兩部分
#include <stdio.h> #include <iostream> #include <iterator> #include <string> #include <algorithm> #include <cmath> using namespace std; int a[1005],b[1005],c[1005]; int n; int set(int position)//最長上升子序列的求法,以position為終點的最長上升子序列 { if(b[position]!=0)return b[position]; int tmp=0; for(int i=0;i<position;i++){ if(a[i]<a[position]){ tmp=max(tmp,set(i)); } } if(tmp==0){ b[position]=1; return 1; }else{ b[position]=tmp+1; return tmp+1; } }
int set2(int position)//反過來的最長上升子序列,從k-n的最長上升子序列 { if(c[position]!=0)return c[position]; int tmp=0; for(int i=position+1;i<n;i++){ if(a[i]<a[position]){ tmp=max(tmp,set2(i)); } } if(tmp==0){ c[position]=1; return 1; }else{ c[position]=tmp+1; return tmp+1; } } int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; b[i]=0; c[i]=0; } int tmp=0; for(int i=0;i<n;i++){ tmp=max(tmp,set(i)+set2(i)-1);//兩段 } cout<<tmp<<endl; }
相關推薦
NOI:1996 登山
題解:動態規劃,兩段最長上升序列,0-k以k結尾的最長上升序列和k-n以k為起點的上升序列兩端和最大 掌握最長上升子序列的求法,即以ak為終點的最長上升子序列注意:題目中說一旦下山就不能再上山,所以要分成上山和下山兩部分#include <stdio.h
NOI 2.6 動態規劃 1996:登山
題目來源:http://noi.openjudge.cn/ch0206/1996/1996:登山總時間限制: 5000ms 記憶體限制: 131072kB描述五一到了,PKU-ACM隊組織大家去登山觀光,隊員們發現山上一個有N個景點,並且決定按照順序來瀏覽這些景點,即每次
NOI:2806 二分法求函式的零點
題目連結題解:二分法注意:double判斷大小應該用差值小於某個數來進行判斷#include <stdio.h> #include <iostream> #include <cmath> using namespace std; doubl
機試NOI:基本演算法
NOI 1.11-2.5 基本演算法學習,不斷更新ing1.11 程式設計基礎之二分查詢二分查詢基本思想:設定左範圍和右範圍,當查詢的數小於中點時,右範圍更新為中點;當大於時,左範圍更新為中點。以此類推,直到左-右==-1或者與中點値相等退出1.13 程式設計基礎之綜合應用這
NOI:7621 硬幣面值組合
題解:簡單列舉注意:排序; 格式化輸出 printf("%03d",i);格式化3位,不足補0#include <stdio.h> #include <iostream> #include <string> #include
NOI:1712 數值轉換
解題思路:以10進製為中間轉換,無論什麼進位制都轉換成10進位制,然後由十進位制進行轉換注意:當輸入0時的輸出應該也為0 得到b進位制時按照輾轉相除的方法,從後往前輸出,順序注意 輸入的字串注意小寫和大寫的處理#include <stdi
NOI:2704 尋找平面上的極大點
題目連結:http://noi.openjudge.cn/ch0406/2704/題意:根據提示,只有位於單獨顏色上的點或者說只有右上角的點才是極大點,所以我對每一個點與x和y軸組成的矩形進行標記,將其中每個點的標記值++,最後只有標記值為1的點,才是我們要找的點#inclu
1996:登山(2.6基本演算法之動態規劃)
1996:登山 總時間限制: 5000ms 記憶體限制: 131072kB 描述 五一到了,PKU-ACM隊組織大家去登山觀光,隊員們發現山上一個有N個景點,並且決定按照順序來瀏覽這些景點,即每次所瀏覽景點的編號都要大於前一個瀏覽景點的編號。同時隊員們還有
NOI:8186 判斷元素是否存在
題目連結:http://noi.openjudge.cn/ch0113/41/41:判斷元素是否存在總時間限制: 1000ms 記憶體限制: 65536kB 描述 有一個集合M是這樣生成的: (1) 已知 k 是集合 M 的元素; (2) 如果 y 是 M 的元素,那麼, 2
NOI:7213 垃圾炸彈
總時間限制: 1000ms 記憶體限制: 65536kB描述 2014年巴西世界盃(2014 FIFA World Cup)開踢啦!為了方便球迷觀看比賽,里約街道上很多路口都放置了的直播大螢幕,但是人群散去後總會在這些路口留下一堆垃圾。為此巴西政府決定動用一種最新發明—
NOI:7062 區間合併
轉載:https://blog.csdn.net/loi_black/article/details/52874488題目:http://noi.openjudge.cn/ch0204/7620/Description 給定 n 個閉區間 [ai; bi],其中i=1,2,…
1996:登山 題解
總時間限制: 5000ms 記憶體限制: 131072kB 描述 五一到了,PKU-ACM隊組織大家去登山觀光,隊員們發現山上一個有N個景點,並且決定按照順序來瀏覽這些景點,即每次所瀏覽景點的編號
NOI:2722 和數
題解:簡單題,列舉,列舉兩數之和是否存在即可#include <stdio.h> #include <iostream> #include <vector> #include <set> using namespace std;
解題:NOI 1999 生日蛋糕
min aps inline 當當 這一 lose tps ace color 題面 裸的搜索題,就說剪枝(註:nw->noww->當前,res->rest->剩余): 1.想達到$Nπ$的體積,那麽半徑一開始最多也就$sqrt(n)$了,再大就超了
noi題庫1.8程式設計基礎之多維陣列:題解大禮包20180918
題目傳送門 以下是對noi題庫1.8的全部題解,有需要的同學請自行學習。 有任何錯漏或者疑問,請留言。謝謝~~~ 1、題目分析 2、程式碼截圖 1.8程式設計基礎之多為陣列 編號 題目 相對難度1-5 知識點 1 矩陣交換行 2
NOI模擬:必去之
題解: fi=maxj{min{ai−aj,bi−bj}+fj+1}(j<i,pj<i)f_i = \max_j \{\min \{a_i-a_j,b_i-b_j\}+f_j+1\} (j \lt i, p_j \lt i)fi
解題:NOI 2016 優秀的拆分
題面 其實題目不算很難,但是我除錯的時候被玄學了,for迴圈裡不寫空格會RE,寫了才能過。神**調了一個多小時是這麼個不知道是什麼的玩意(真事,可以問i207M=。=),心態爆炸 發現我們只要找AA或者BB就行了,因為另一半反過來再做一次然後拼起來就可以了,那麼就設$stp[i]$表示從$i$開始有多少個
【Openjudge:Noi】7891:一元三次方程求解 c++
【Openjudge:Noi】7891:一元三次方程求解 總時間限制: 1000ms 記憶體限制: 65536kB 描述 有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。 給出該方程中各項的係數(a,b,c,d 均為實數),並約定該方程
百練noi 16:矩陣剪刀石頭布
16:矩陣剪刀石頭布 檢視提交統計提問 總時間限制: 5000ms 記憶體限制: 65536kB 描述 Bart的妹妹Lisa在一個二維矩陣上創造了新的文明。矩陣上每個位置被三種生命形式
解題:NOI 2009 管道取珠
題面 考慮這個平方的實際意義,實際是說取兩次取出一樣的序列 那麼設$dp[i][j][k][h]$表示第一次在上面取$i$個下面取$j$個,第二次在上面取$k$個下面取$h$個的方案數 等等$n^4$根本開不下+過不去啊=。= 發現$i,j,k$固定時$h$可以算出來,於是少一個$n$的複雜度 建議