动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。
1.确认状态:求什么定义什么。
2.动规状态转移方程:缩小规模,但本质没有改变,问题求什么,子问题求什么。//重点
3.确定边界:不能被状态转移方程所计算出来的状态就是边界。
4.确定填表顺序:从左到右或从上往下。
给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。
第一行是一个整数,表示序列的长度 n。
第二行有 n 个整数,第 ii 个整数表示序列的第 i 个数字 ai。
输出一行一个整数。
- 7
- 2 -4 3 -1 2 -4 3
4
- int n,arr[n];//定义一个正整数n,和一个存放数据的数组arr
- int t[n];//定义一个数组t他的作用是存放一段又一段的最大子段和
arr:2 -4 3 -1 2 -4 3
t:0 0 0 0 0 0 0
arr数组第一个数2和0比2大所以t[0]=2
arr:2 -4 3 -1 2 -4 3
t:2 0 0 0 0 0 0
arr数组第2个数-4加上2比-4大所以t[1]=2+-4
arr:2 -4 3 -1 2 -4 3
t:2 -2 0 0 0 0 0
arr数组第3个数3加上-2比3小所以t[2]=3
arr:2 -4 3 -1 2 -4 3
t:2 -2 3 0 0 0 0
arr数组第4个数-1加上3比-1大所以t[3]=2
arr:2 -4 3 -1 2 -4 3
t:2 -2 3 2 0 0 0
arr数组第5个数2加上2比2大所以t[4]=4
arr:2 -4 3 -1 2 -4 3
t:2 -2 3 2 4 0 0
arr数组第6个数-4加上4比-4大所以t[5]=0
arr:2 -4 3 -1 2 -4 3
t:2 -2 3 2 4 0 0
arr数组第7个数3加上0比3相等所以t[6]=3
arr:2 -4 3 -1 2 -4 3
t:2 -2 3 2 4 0 3
而t数组最大的是4
所以最大子段和是4
状态转移方程为f[i]=max(f[i-1]+arr[i],arr[i]);//重点
没有转移不到的地方
从前往后
代码
- #include
- #include
- #define N 1000
-
- using namespace std;
-
- int n,arr[N],f[N],x;
- int main(){
- cin>>n;
- for(int i=0;i
- cin>>arr[i];
- }
- f[0]=arr[0];
- for(int i=1;i<=n;i++){
- f[i]=max(f[i-1]+arr[i],arr[i]);
- }
- for(int i=0;i
-
-
相关阅读:
Dubbo中@EnableDubbo注解原理
银行利率bp是什么意思,利率bp怎么换算
python调用飞书机器人发送文件
2022.11.12 英语背诵
django小区居民出入申报系统Vue+flask疫情防控社区疫苗预约系统python
用java实现 s=a+aa+aaa+aaaa+aa...a 的值,a是用户任意输入的数字,n为最后一个累加的数的位数(累加数的个数)
Java编程练习题Demo61-Demo70
Redis解决缓存穿透,缓存雪崩,缓存击穿思路
DDD - 来自听众的16个DDD问题,美团技术团队是这样回答的
【C#】【SAP2000】OAPI文档案例详解
-
原文地址:https://blog.csdn.net/setprecisiona/article/details/127701105
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU