1087(Super jumpinng ,jumping ,jumping)

来源:互联网 发布:php 中文变量名 编辑:程序博客网 时间:2024/06/13 18:58

题目:

输入一组数字(a1、a2、a3……an ),按照绝对增序的方式选出一组子数据(b0、b1……bm)(b0 < b1 < b2 < ^ < bm).从各种满足条件的序列中找出和最大的那个。

 

代码部分:

#include <iostream >
#include <stdio.h>

using namespace std;

int main()
{
 int Number,i;
 int result;
 
 int input[1024],sum[1024];
 

 while ( cin>>Number ,Number != 0 )
 {
  result = INT_MIN;

  for(  i = 0 ; i < Number ; i++ )
  {
   cin>>input[i];
  }

  memset(sum,1024 ,sizeof(sum));
  sum[0] = input[0] ;

  for ( i = 1 ; i < Number ; i++)
  {

   sum[i] = input[i];

   for ( int j = 0 ; j < i ; j++)
   {   

    if ( input[i] > input[j] && sum[i] < sum[j] + input[i])
    {     
     sum[i] = sum[j] + input[i];
    }
   }

   if ( result < sum[i] )
   {
    result = sum[i];
   }
  }

  cout<<result<<endl;


  
  
 }

 return 0 ;
}

 

思路分析:

自己的思路不足之处:边输入数据边处理,如果当前输入数据大于子序列中前一个加入的数据,则把新数据归入其中。但是,这样做,只能处理像 1 5 3 6 这种情况, 如果是 1 5 2  3 4 这种情况就不能进行统计了。

改进思路:

想要统计第i个数据的时候,要先检查一下 数据数据 从 0 到 i-1中 ,小于第i个数据的统计和 。如果这个和加上当前数据大于sum【i】 的话 ,更换数据 否则 不更新。 

 

原创粉丝点击