Super Jumping! Jumping! Jumping!

来源:互联网 发布:域名城,潇湘华 编辑:程序博客网 时间:2024/05/08 06:50


http://acm.hdu.edu.cn/showproblem.php?pid=1087

//居然没超时

#include<stdio.h>
#include<string.h>
int dp[5000000];
int main()
{
 int n,a[1010],i,j,max;
 while(scanf("%d",&n),n)
 {
  for(i=0;i<n;i++)
   scanf("%d",a+i);
  memset(dp,0,sizeof(dp));
  for(i=0;i<n;i++)
  {
   dp[a[i]]=a[i];
  // printf("dp[%d]=%d\n",a[i],a[i]);
   max=0;
   for(j=1;j<a[i];j++)
   {
    if(dp[j]>max)
     max=dp[j];
    // printf("dp[%d]=%d\n",a[i],dp[a[i]]);
   }
   dp[a[i]]+=max;
  }
  max=0;
  for(i=1;i<=5000000;i++)
   if(dp[i]>max)
    max=dp[i];
  printf("%d\n",max);
 }
 return 0;
}


#include<stdio.h>
#include<string.h>
#define max(x,y) x>y?x:y
int main()
{
 int a[1010],dp[1010],n,i,j,max1,max2;
 while(scanf("%d",&n),n)
 {
  for(i=0;i<n;i++)
   scanf("%d",a+i);
  memset(dp,0,sizeof(dp));
  max2=a[0];
  for(i=0;i<n;i++)
  {
   max1=0;
   for(j=0;j<i;j++)
    if(a[j]<a[i])
     max1=max(max1,dp[j]);
   dp[i]=a[i]+max1;
   if(dp[i]>max2)
    max2=dp[i];
  }
  printf("%d\n",max2);
 }
 return 0;
}

0 0