dp专题 第十三题 最大上升子序列的和

来源:互联网 发布:mac照片文件夹在哪里 编辑:程序博客网 时间:2024/05/16 19:10

1、简单描述

给出一个序列,求该序列最大上升子序列的和。

注意:最长上升子序列的和不一定是最大上升子序列的和。

2、思路

#include<bits/stdc++.h>using namespace std;int arr[1001];int Max[1001];void Maxsum(int k){    memset(Max,0,sizeof(Max));    for(int i=1;i<=k;i++)    {        Max[i]=arr[i];        for(int j=1;j<i;j++)        {           if(arr[i]>arr[j])           {               if(Max[i]<Max[j]+arr[i])               {                  Max[i]=Max[j]+arr[i];               }            }        }    }}int main(){    int n;    cin>>n;    for(int i=1;i<=n;i++)        cin>>arr[i];    Maxsum(n);    int Maxvalue=0;    for(int i=1;i<=n;i++)    {        if(Maxvalue<Max[i])        Maxvalue=Max[i];    }    cout<<Maxvalue<<endl;    return 0;}
动态规划

1、缩小问题  以序列第i个元素为末尾元素的最大子序列和。

2、定义状态,和的结果仅与i有关,设立一个n维数组Max【i】。

3、找状态转移方程。

4、比较求解。

0 0
原创粉丝点击