1003

来源:互联网 发布:世界网络强国有哪些 编辑:程序博客网 时间:2024/04/28 14:50

题目编号:1003

题目大意:这个和最长上升子序列类似,不过有区别。最长上升子序列是求最长的数的个数,这题是求最大的上升子序列的和。

解题思路:和老师上课讲的最长上升子序列类似的求法,不过有所改动。首先建立2个数组,一个储存给定的数,一个储存到N时最大的和,与最长子序列区别在于它储存的是到N                      的最多的个数,也就是最长的那个序列的数字的个数。利用2个循环数组嵌套来找到到N时最大的和,存到数组中,需要用if条件语句来判断,是否是最大。

感想:看透题目本质,利用所学,灵活变化。

#include<iostream>using namespace std;int arr[1001];int brr[1001];int n,i,j,x;int main(){  while(cin>>n&&n)  {    for(i=1;i<=n;i++)      cin>>arr[i];     x=brr[1]=arr[1];    for(i=2;i<=n;i++)    {      brr[i]=arr[i];      for(j=1;j<i;j++)      {        if(brr[j]<brr[i]&&brr[j]+arr[i]>brr[i])          brr[i]=brr[j]+arr[i];      }      if(x<brr[i])        x=brr[i];    }  cout<<x<<endl;  }  return 0;}

0 0