程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目1480:最大上升子序列和

題目1480:最大上升子序列和

編輯:C++入門知識

題目1480:最大上升子序列和時間限制:1 秒 內存限制:128 兆 特殊判題:否 提交:562 解決:175   題目描述: 一個數的序列bi,當b1 < b2 < ... < bS的時候,我們稱這個序列是上升的。對於給定的一個序列(a1, a2, ...,aN),我們可以得到一些上升的子序列(ai1, ai2, ..., aiK),這裡1 <= i1 < i2 < ... < iK <= N。比如,對於序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。這些子序列中序列和最大為18,為子序列(1, 3, 5, 9)的和.   你的任務,就是對於給定的序列,求出最大上升子序列和。注意,最長的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和為100,而最長上升子序列為(1, 2, 3)。   輸入: 輸入包含多組測試數據。 每組測試數據由兩行組成。第一行是序列的長度N (1 <= N <= 1000)。第二行給出序列中的N個整數,這些整數的取值范圍都在0到10000(可能重復)。   輸出: 對於每組測試數據,輸出其最大上升子序列和。   樣例輸入: 7 1 7 3 5 9 4 8樣例輸出: 18來源: 2012年北京大學計算機研究生機試真題       [cpp]  /*********************************  *   日期:2013-3-25  *   作者:SJF0115  *   題號: 題目1480:最大上升子序列和  *   來源:http://ac.jobdu.com/problem.php?pid=1480  *   結果:AC  *   來源:2012年北京大學計算機研究生機試真題  *   總結:  **********************************/   #include<stdio.h>    #include<string.h>       int array[1010];   int Max[1010];      void LIS(int k){       memset(Max,0,sizeof(Max));       for(int i = 1;i <= k; i++){           Max[i] = array[i];           //和i號數據之前的數據比較            for(int j = 1;j < i;j++){               if(array[i] > array[j]){                   if(Max[i] < Max[j] + array[i]){                       Max[i] = Max[j] + array[i];                   }               }           }       }   }       int main()   {       int N,i;       //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);        while(scanf("%d",&N)!=EOF){           //輸入數據            for(i = 1;i <= N;i++){               scanf("%d",&array[i]);           }           LIS(N);           //輸出最大值            int MaxValue = -1;           for(i = 1;i <= N;i++){               if(MaxValue < Max[i]){                   MaxValue = Max[i];               }           }           printf("%d\n",MaxValue);       }       return 0;   }     /********************************* *   日期:2013-3-25 *   作者:SJF0115 *   題號: 題目1480:最大上升子序列和 *   來源:http://ac.jobdu.com/problem.php?pid=1480 *   結果:AC *   來源:2012年北京大學計算機研究生機試真題 *   總結: **********************************/ #include<stdio.h> #include<string.h>   int array[1010]; int Max[1010];   void LIS(int k){ memset(Max,0,sizeof(Max)); for(int i = 1;i <= k; i++){ Max[i] = array[i]; //和i號數據之前的數據比較 for(int j = 1;j < i;j++){ if(array[i] > array[j]){ if(Max[i] < Max[j] + array[i]){ Max[i] = Max[j] + array[i]; } } } } }   int main() { int N,i; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&N)!=EOF){ //輸入數據 for(i = 1;i <= N;i++){ scanf("%d",&array[i]); } LIS(N); //輸出最大值 int MaxValue = -1; for(i = 1;i <= N;i++){ if(MaxValue < Max[i]){ MaxValue = Max[i]; } } printf("%d\n",MaxValue); } return 0; }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved