您的位置:首页 > 其它

POJ--1887:Testing the CATCHER (DP求最长非递增子序列)

2014-08-28 20:12 375 查看
1. 题目源地址:http://poj.org/problem?id=1887

2. 易错点:题目倒不是很难,利用DP求最长非递增子序列,其实和DP求最长递增子序列是差不多的。

易错点在于数组要开的足够大,之前开200,2000都不行,后来开到5000才AC了。

关于DP求最长递增子序列之前写过一篇博客的,这里附上链接:/article/10670931.html

3. 解题代码:

//POJ--1887:Testing the CATCHER   DP求最长非递增子序列
#include<iostream>
using namespace std;
int main()
{
int num[5000],dp[5000];
int n,i,j;
int caseNum=0;
while(cin>>num[0]  && num[0]!=-1)
{
caseNum++;
for(n=1; ;n++)
{
cin>>num
;
if(num
==-1)
break;
}
for(i=0;i<n;i++)
dp[i]=1;

for(i=1;i<n;i++)
{
for(j=0;j<i;j++)
{
if(num[j]>=num[i] && dp[j]+1>dp[i])//注意和DP求最长递增子序列的区别
dp[i]=dp[j]+1;
}
}

int max=0;
for(i=0;i<n;i++)
{
if(dp[i]>max)
max=dp[i];
}
cout<<"Test #"<<caseNum<<":"<<endl;
cout<<"  maximum possible interceptions: "<<max<<endl;
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: