原文链接: HDU 1257
上一篇: PAT B1061
下一篇: HDU 1166
解题思路 : 由于炮弹的发射高度是递减的,如果后面的导弹的高度大于前面的高度,就不能把后面的那颗导弹拦截,若想拦截,就要增加一个拦截系统。问题的实质就是求出最长的连续递增子序列的长度。
AC代码:
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#define LL long long
int const MAX = 1e6+1;
using namespace std;
int a[MAX],dp[MAX];
int main(int argc, char *argv[])
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n;
while ( scanf("%d", &n)==1 ) {
for(int i=1; i<=n; i++) {
scanf("%d",a+i);
dp[i]=1;
}
for(int i=1; i<=n; i++) {
for(int j=1; j<i; j++) {
if(a[i]>=a[j] && dp[j]+1>dp[i])
dp[i]=dp[j]+1;
}
}
int ans=-1;
for(int i=1; i<=n; i++)
if(ans<dp[i])
ans=dp[i];
printf("%d\n", ans);
}
return 0;
}
517

被折叠的 条评论
为什么被折叠?



