动态规划入门之线性动态规划

P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目要求求连续得一段子串使其累加和最大。

我们做动态规划首先考虑小情况,然后推而广之。

假设三个数1,-2,5.

我们先选1然后我们在-2以及-2加1里边选,我们选-1,接着我们在-1以及5里边选我们选择5

由此我们发现我们选择是从以第n-1个数结尾的最长长度加上第n个数同第n个数比取最大的。

正如我们在判断第二个数-2时,我们不确定加上第二个数是否可行,因为要求连续,所以我们

针对第二个数的策略只有加与不加,不加就从第二个数开始为起点加的话就累加,算最大的。

同时我们还要在以某个数为终点的累加中取最大的。

java 复制代码
import java.awt.FontFormatException;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.plaf.ColorChooserUI;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec;
public class Main {
  public static void main(String[] args) throws IOException  {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
int a=Integer.parseInt(aStrings[0]);
aa=new int[a];
String[] bStrings=br1.readLine().split(" ");
int b;
for(b=0;b<a;b++) {
	aa[b]=Integer.parseInt(bStrings[b]);
}
int[] dp=new int[a+1];
dp[0]=aa[0];
int answer=aa[0];
for(b=1;b<a;b++) {
	dp[b]=Math.max(aa[b], dp[b-1]+aa[b]);
	answer=Math.max(answer, dp[b]);
}
System.out.println(answer);
  }
public static int[] aa;
		  
 }
 
相关推荐
weixin_lizhao5 分钟前
50天独立打造企业级API网关(二):安全防护体系与弹性设计
java·spring boot·安全·spring cloud·gateway
逸Y 仙X34 分钟前
文章二十四:Elasticsearch查询排序应用实战e
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
翻身的咸鱼ing1 小时前
常用代码知识
算法·深度优先·哈希算法
feifeigo1231 小时前
自适应大邻域搜索(ALNS)算法的MATLAB 实现
开发语言·算法·matlab
RH2312111 小时前
2026.4.29数据结构 直接插入排序&&希尔排序
数据结构·算法·排序算法
搬砖的小码农_Sky1 小时前
AI Agent:OpenClaw的算法架构
人工智能·算法·ai·架构·人机交互·agi
aXin_ya1 小时前
微服务 第十天 (Redis多级缓存)
java·redis·微服务
热心网友俣先生2 小时前
2026年金地杯A题解题思路
算法
逸Y 仙X2 小时前
文章二十五:ElasticSearch 分页查询
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
科研前沿2 小时前
SpaceOS™空间计算底座与五大自研引擎,实现多项关键技术突破
大数据·运维·人工智能·算法·重构