最少攔截系統
拿到這道題的時候,是剛開始接觸dp,今晚又看到它了,覺得它應該算是一道比較經典的dp題,因此,就又拿出來看了
這道題重要的是看懂題意,我做的時候,剛開始總wa,後來才明白題意理解錯了
題意:面對敵方陸續打來的導彈,我方需要配備幾套攔截系統,才能攔截敵人所有的導彈(攔截系統所能攔截的導彈的高度必須低於上次此套系統攔截的導彈的高度,第一次攔截的高度H < 30000)
例如,導彈打來的高度依次爲
data[N] 389 207 155 300 299 170 158 65
sum[N] 1 1 1 2 2 2 2 1
上圖中1,2即是攔截系統的編號,sum[N]數組存儲的是相應位置上的炮彈被哪套攔截系統所攔截
解題思路:遍歷data數組,同時跟前面的數作比較,如果高於前面的數就加1,,
Description
怎麼辦呢?多搞幾套系統唄!你說說倒蠻容易,成本呢?成本是個大問題啊.所以俺就到這裏來求救了,請幫助計算一下最少需要多少套攔截系統.
Input
Output
Sample Input
Sample Output
現給出代碼:
#include <iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main()
{
int M,N;
int data[1000+10];
int dp[1000];
int i, j;
while(~scanf("%d",&M))
{
for(i = 0; i < M; i++)
{
scanf("%d",&data[i]);
dp[i]=1;
}
for(i = 0; i < M; i++)
{
for(j = 0; j < i;j++)
{
if(data[i] > data[j])
{
dp[i] = max(dp[i],dp[j]+1);//更新
}
}
}
int ans = 0;
for(i = 0; i < M; i++)
{
ans = max(ans,dp[i]);
}
printf("%d\n",ans);
}
return 0;
}