//http://acm.hdu.edu.cn/showproblem.php?pid=1087
/*
第一眼感觉是动态规划,但是时间复杂度还是很高的O(n*n)啊.
*/
#include <stdio.h>
#include <string.h>
int digit[1005];
int tmp[1005];
int biggest(int n)
{
int res;
int i,k;
res=0;
tmp[0]=digit[0];
for(i=1;i<n;i++)
{
//每一次循环之后tmp数组中存放到当前位置为止的最大值
tmp[i]=digit[i];
for(k=0;k<i;k++)
{
//如果符合条件就更新数组
if(digit[i]>digit[k]&&tmp[i]<tmp[k]+digit[i])
tmp[i]=tmp[k]+digit[i];
if(res < tmp[i])
res=tmp[i];
}
}
return res;
}
int main()
{
int n,i;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%d",&digit[i]);
printf("%d\n",biggest(n));
}
return 0;
}
HDU1087 最长上升子序列加强版
最新推荐文章于 2020-11-25 04:05:40 发布