1. 程式人生 > >陣列中和最大的遞增子序列

陣列中和最大的遞增子序列

問題描述
Maximum Sum Increasing Subsequence
給定一個序列,找到這個序列的一個和最大的子序列,使得子序列的所有元素是升序的,且元素之間的相對位置不變(元素可以在原陣列中不相鄰,但是相對位置不變)
比如, LIS for { 10, 22, 9, 33, 21, 50, 41, 60, 80 } 是 255,LIS 是 {10, 22, 33, 50, 60, 80}.

參考陣列中最長的升序子序列,這兩道題類似,只是改變了一下條件,將“最長”變為了“和最大”,參考上篇文章的思路,用非遞迴方法實現:

int MSIS(int *arr,int n)
{
  int *max_here
= new int[n](); max_here[0] = arr[0]; int maxS = arr[0]; for(int i = 1; i<n; ++i) { for(int j = 0; j<i; ++j) { if(arr[j]<arr[i] && max_here[j]+arr[i]>max_here[i]) max_here[i] = max_here[j]+arr[i]; } if(max_here[i]>maxS) maxS = max_here[i]; } delete
[]max_here; return maxS; }