(每日一题)连续⼦数组最⼤和———<动态规划-线性dp>

1. 题⽬链接:DP6连续⼦数组最⼤和

2. 题⽬描述:

(每日一题)连续⼦数组最⼤和———<动态规划-线性dp>_第1张图片

3. 解法:

算法思路:

简单线性dp。

i. 状态表⽰: dp[i] 表⽰:以i位置为结尾的所有⼦数组中,最⼤和是多少。

ii. 状态转移⽅程: dp[i] = max(dp[i - 1] + arr[i], arr[i])

C++算法代码: 

#include 
#include 
using namespace std;
int main()
{
    //初始化
    int n;
    cin>>n;
    vectortemp(n);
    for(int i=0;i>temp[i];
    }
    //计算
    int ret=temp[0],dp=temp[0];
    for(int i=1;i

Java算法代码:

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息 
public class Main
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[] arr = new int[n + 1];
		int[] dp = new int[n + 1];
		for (int i = 1; i <= n; i++)
		{
			arr[i] = in.nextInt();
		}
		int ret = -101;
		for (int i = 1; i <= n; i++)
		{
			dp[i] = Math.max(dp[i - 1], 0) + arr[i];
			ret = Math.max(ret, dp[i]);
		}
		System.out.println(ret);
	}
}

你可能感兴趣的:(每日一题,动态规划,算法,考研,每日一题)