题目大意:求给定数列的最长不升子序列。
思路:比较水的DP,数组data存储给定的数列,dp[i]表示以data[i]结尾的最长不升子序列的长度。状态转移方程为if (data[j]>=data[i]&&dp[j]>=dp[i])dp[i]=dp[j]+1;(0<=j<i)
#include <stdio.h>
int data[5000];
int dp[5000];
int main()
{
int t,i,j,k;
int num,ctr,maxnum;
t=1;
while (1) {
ctr=0;
maxnum=1;
while(1) {
scanf("%d",&num);
if (num==-1)
break;
data[ctr]=num;
dp[ctr]=1;
ctr++;
}
if (ctr==0)
break;
dp[0]=1;
for (i=1;i<ctr;i++) {
for (j=0;j<i;j++) {
if (data[j]>=data[i]&&dp[j]>=dp[i])
dp[i]=dp[j]+1;
/*dp[i]++;*/
}
if (dp[i]>maxnum)
maxnum=dp[i];
}
printf("Test #%d:\n maximum possible interceptions: %d\n",t,maxnum);
if (ctr!=0)
printf("\n");
t++;
}
return 0;
}