i - 最少攔截系統
time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u
submit
status
description
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.
怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裡來求救了,請幫助計算一下最少需要多少套攔截系統.
input
輸入若干組資料.每組資料報括:飛彈總個數(正整數),飛彈依此飛來的高度(雷達給出的高度資料是不大於30000的正整數,用空格分隔)
output
對應每組資料輸出攔截所有飛彈最少要配備多少套這種飛彈攔截系統.
sample input
8 389 207 155 300 299 170 158 65
sample output
2
這個遞推方程的意思是,在求以ai為末元素的最長遞增子串行時,找到所有序號在l前面且小於ai的元素aj,即j如果這樣的元素存在,那麼對所有aj,都有乙個以aj為
末元素(有可能為1,不一定j越大其值越大)
的最長遞增子串行的長度f(j),把其中最大的f(j)選出來,
那麼f(i)就等於最大的f(j)加上1,即以ai為末元素的最長遞增子串行,等於以使f(j)最大的那個aj為末元素的遞增子串行最末再加上ai;如果這樣的元素不存在,那麼ai自身構成乙個長度為1的以ai為末元素的遞增子串行。
注意dp[i]表示的是一a[i]為末尾元素的列長度,並不是前i個數的最大子列長度
1 2 3 4 5 6 0
1 2 3 4 5 6 7
a[7]就為1
#include#includeint find_dp(int a,int n);
int my_max(int x,int y)
int dp[1005];
int main()
printf("%d\n",find_dp(a,n));
}return 0;
}int find_dp(int a,int n)
return max;
}
I 最少攔截系統
題目入口 i 最少攔截系統 解題思路 第一遍遍歷前推wa了 很多人想知道為什麼會錯 找到題目裡的坑就豁然開朗了 雖然是飛彈依次飛來 但是後面發射的飛彈可以選擇前面已用過的攔截系統進行攔截 這裡給乙個拆分例子理解一下 示例 8 389 207 155 300 299 170 158 65 389 20...
最少攔截系統
description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.怎麼辦呢...
最少攔截系統
題目 description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統.但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.某天,雷達捕捉到敵國的飛彈來襲.由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈.怎...