您的位置:首页 > 其它

hdu 1257 dp(最长下降子序列)

2012-04-16 16:36 176 查看
View Code

//hdu 1257  dp(最长下降子序列的长度)

//题意是要求最少要几套拦截系统,没套系统拦截的后一个导弹
//要比前一个低,导弹按顺序来,讨论每个导弹时要依次看
//比 所拥有的哪个系统 的最低高度低最少的,则让这个系统拦截
//若所拥有的系统中 的最低高度都比该导弹低,则要再建一套系统

#include <stdio.h>
#include <string.h>

#define N 10005

int s
, dp
;

int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
for(int i = 0; i < n; ++i)
{
scanf("%d", &s[i]);
dp[i] = 1;
}
int max = 0;
for(int i = 0; i < n; ++i)  //拦截第i 个导弹
{
for(int j = i - 1; j >= 0; --j)
{   //若第j 个导弹比第 i 个导弹低,且且拦截第 j
//个导弹所需的系统数 再建一个拦截i,比拦截i所需的
//系统数多,则需要建这个,因为 拦截第j 个需要的系统数
//比 i 多,导弹i 又在j 后才来,这是不可能的
if(s[i] > s[j] && dp[i] < dp[j] + 1)
{
dp[i] = dp[j] + 1;
if(max < dp[i])
max = dp[i];
}
}
}
printf("%d\n", max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: