某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。
輸入格式
輸入資料為兩行,
第一行為飛彈的數目n(n<=1000)
第二行飛彈依次飛來的高度,所有高度值均為不大於30000的正整數。
輸出格式
1.輸出只有一行是這套系統最多能攔截的飛彈數和 2.要攔截所有飛彈最少要配備這種飛彈攔截系統的套數。兩個資料之間用乙個空格隔開
樣例輸入
8389 207 155 300 299 170 158 65
樣例輸出
6 2可以先將這個問題分作兩個小問題解決,第乙個小問明顯是要求出最長非嚴格下降子串行,因為它要保證每一發炮彈都不能高於前一發的高度
第二個小問則是要你求出最長嚴格上公升子串行,這個結論就不能明顯的出啦,因為一開始我也想不出來,也是看了題解才懂。
證明過程:
目標首先是要保證所有的目標都要摧毀,既然每個目標都要被摧毀,那麼如果這個被摧毀的目標的後面的目標比它搞的話,摧毀這個目標
的飛彈系統就不能摧毀它後面的目標了。從而,我們所需要的炮彈系統的高度必定是嚴格上公升的序列~又因為要摧毀所有的目標,所以為最長嚴格
上公升子串行~
ps:這道題的資料目測比較弱,第二問我用非嚴格上公升去做也能ac。。。。。
附上ac的c++**:
1 #include 2 #include 3view code4using
namespace
std;
5const
int maxn = 1111;6
inta[maxn],inc[maxn],dece[maxn];
7const
int inf = 0x3f3f3f3f;8
intmain()
23//
cout<24 dec =max(dec,dece[i]);25}
26//
cout<27 a[0] = -inf;//
注意重新初始化
28for(int i = 1;i <= n;++i)
33//
cout<34 inc =max(inc,inc[i]);35}
36//
cout<37 printf("
%d %d\n
",dec,inc);38}
39return0;
40 }
題目描述
n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學排成合唱隊形。
合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1,2…,k,他們的身高分別為t1,t2,…,tk, 則他們的身高滿足t1<...ti>…>tk(1<=i<=k)。
你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。
輸入格式
輸入的第一行是乙個整數n(2<=n<=100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130<=ti<=230)是第i位同學的身高(厘公尺)。
輸出格式
輸出包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。
樣例輸入
8186 186 150 200 160 130 197 220
樣例輸出
4思路:
設dec[i] 是以a[i] 為結尾的最長嚴格上公升序列,inc[i] 是以a[i]開始的最長嚴格下降序列,所以 最終答案是 n - max(dec[i] + inc[i] - 1);
dec[i] 和inc[i] 仿照上面那道題 即可,不過注意**細節有所不同
1 #include 2 #include 3view code4using
namespace
std;
5const
int maxn = 111;6
inta[maxn],inc[maxn],dece[maxn];
7const
int inf = 0x3f3f3f3f;8
intmain()23}
24 a[n+1] = -inf;//
注意重新初始化
25for(int i = n;i >= 1;--i)30}
31int ans = 0;32
for(int i = 1;i <= n;i++)
35 printf("
%d\n
",n - ans + 1
);36}37
return0;
38 }
兩道簡單的題目
第一次發表文章,就發表兩到簡單點的題目好了 第一道題目是這樣的 現在有乙個整數的陣列,然後給定乙個目標數,我們要做的是找出陣列中唯一存在的兩個不同的數,其相加能夠得到這個目標數,然後返回這兩個數的下標比如 given nums 2,7,11,15 target 9,because nums 0 nu...
中興筆試的兩道題目
中興的筆試的兩道題目,乙個題目是按頻次排序,乙個題目是動態規劃求揹包問題。題目描述 題意為從乙個無序陣列中,將其中的整數按照出現的頻次多少來排列 並且出現幾次就排列幾個 按照出現頻次從高倒低排序,並且頻次相同的時候做乙個穩定排序,先出現的排在前面,比如輸入為 1,2,1,2,9,9,1,6,4,4,...
兩道有意思的題目
碰到兩道有意思的題目,記錄一下。題目一 問,對於任意乙個正整數,是否存在乙個它的倍數全是由1和0組成?例如 1 1 1 2 5 10 2的5倍是10,10由1和0組成 3 37 111 3 的 37 倍是111,111 全部由1組成 4 25 100 4 的 25 倍是100,100 由1和0組成 ...