ACM第三次練習—1003

題意:求最大遞增子段和。

思路:類似最長遞增子序列的想法,只不過這裏求的是到第i個元素時,最長遞增子序列,各個元素的和。求最大的那個值。

感想:這幾個都類似的。

代碼:

#include <stdio.h>  
#include <string.h>  
#include <algorithm>  
using namespace std;  
  
int a[1005],dp[1005];  
const int inf = 999999999;  
  
int main()  
{  
    int n,i,t,m,j,ans;  
    while(~scanf("%d",&n),n)  
    {  
        memset(dp,0,sizeof(dp));  
        for(i = 1;i<=n;i++)  
        scanf("%d",&a[i]);  
        for(i = 1;i<=n;i++)  
        {  
            ans = -inf;  
            for(j = 0;j<i;j++)  
            {  
                if(a[i]>a[j])  
                ans = max(ans,dp[j]);  
            }  
            dp[i] = ans+a[i];  
        }  
        ans = -inf;  
        for(i = 0;i<=n;i++)  
        {  
            if(dp[i]>ans)  
            ans = dp[i];  
        }  
        printf("%d\n",ans);  
    }  
  
    return 0;  
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章