最长上升序列模型 acwing 1016.最大上升子序列和

简介: 最长上升序列模型 acwing 1016.最大上升子序列和

一个数的序列 ,当  的时候,我们称这个序列是上升的。

对于给定的一个序列,我们可以得到一些上升的子序列,这里。

比如,对于序列(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。

第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。

输出格式

输出一个整数,表示最大上升子序列和。

数据范围

输入样例:

7

1 7 3 5 9 4 8

输出样例:

18

难度:简单
时/空限制:1s / 64MB
总通过数:3427
总尝试数:4486
来源:《信息学奥赛一本通》
算法标签

c++代码

#include
 #include
 using namespace std;
 int main()
 {
     int n;
     cin >> n;
     int a[n];
     int dp[n];
     for (int i = 0; i < n; i++)
     {
         cin >> a[i];
         dp[i] = a[i];
     }
     int maxn = INT_MIN;
     for (int i = 0; i < n; i++) 
     {
         for (int j = 0; j < i; j++) 
         {
             if (a[j] < a[i]) 
             {
                 dp[i] = max(dp[i],dp[j] + a[i]);    
             }
         }
         maxn = max(maxn,dp[i]);
     }
     cout << maxn << endl;
     return 0;
 }

java代码

import java.util.*;
 import java.io.*;
 public class Main{
     public static void main(String[] args) throws IOException{
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
         int n = Integer.parseInt(reader.readLine());
         int[] arr = new int[n];
         int[] dp = new int[n];
         String[] s = reader.readLine().split(" ");
         for (int i = 0; i < n; i++) {
             arr[i] = Integer.parseInt(s[i]); 
             dp[i] = arr[i];
         }
         int max = Integer.MIN_VALUE;
         for (int i = 0; i < n; i++) {
             for (int j = 0; j < i; j++) {
                 if (arr[j] < arr[i]) {
                     dp[i] = Math.max(dp[i],dp[j] + arr[i]);                    
                 }
             }
             max = Math.max(dp[i],max);
         }
         writer.write(max + "\n");
         writer.flush();
         writer.close();
         reader.close();
     }
 }


相关文章
|
2月前
|
算法 C++
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
|
2月前
|
人工智能 算法 测试技术
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
|
10月前
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
|
2月前
最长上升子序列(经典动态规划问题)
最长上升子序列(经典动态规划问题)
|
2月前
|
算法 程序员 索引
【算法训练-动态规划 三】【双序列DP问题】最长重复子数组、最长公共子串、最长公共子序列、编辑距离
【算法训练-动态规划 三】【双序列DP问题】最长重复子数组、最长公共子串、最长公共子序列、编辑距离
76 0
|
算法 Java C++
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
38 0
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
|
算法 C++
【动态规划篇】最少分割回文 && 编辑距离 && 不同的子序列
【动态规划篇】最少分割回文 && 编辑距离 && 不同的子序列
【动态规划篇】最少分割回文 && 编辑距离 && 不同的子序列
|
索引
LeetCode最长序列
LeetCode最长序列
87 0
LeetCode最长序列
|
人工智能 算法
Acwing 896. 最长上升子序列 II
Acwing 896. 最长上升子序列 II
76 0
|
算法
动态规划--最长上升子序列模型(二)
AcWing算法提高课内容,本文讲解 动态规划
79 0
动态规划--最长上升子序列模型(二)

热门文章

最新文章