动态规划总结

1.dp[i]表示以A[i]结尾的最值

例子1:最大连续子序列和(洛谷P3009)
dp[i]=max(dp[i-1],dp[i-1]+A[i])

例子2:最长不下降子序列
dp[i]=max(1,dp[j]+1)(j=1,2...i-1&&A[j]<A[i])
(一般不要求连续的都要从一遍历到前一个元素)


2.dp[i]表示以i点为起点的xx

例子:DAG的最长路
dp[i]表示从i点出发能得到的最长路径长度
dp[i]=max(dp[j])+length(j->i)(存在j->i)


3.dp[i][j]表示从i到j的xx

例子1:最长公共子序列
dp[i][j]表示字符串A的i位与字符串B的j位之间的最长公共子序列
if(A[i]==B[j])
dp[i][j]=dp[i-1][j-1]+1
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
边界条件:dp[i][0]=0;dp[0][j]=0;

例子2:最长回文子串
dp[i][j]表示S[i]到S[j]表示的是否为回文子串(注意这里的dp是bool型)
if(S[I]==S[j]&&dp[i+1][j-1]==1)
dp[i][j]=1
else
dp[i][j]=0;
边界:dp[i][i]=1
if(S[i]==S[i+1]) dp[i][i+1]=1;
else dp [I][i+1]=0
实现:枚举子串的长度(从三开始,小于len)
{
枚举子串的起始端点(从0开始,小于len-子串长度+1)
}


4.背包问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,893评论 0 18
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 10,227评论 0 0
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,702评论 0 89
  • 阿江走到宿舍门口的时候,眼睛都快睁不开了,一晚没睡,让他此刻只想躺在床上舒舒服服的睡一觉,一推开宿舍的门,就跟刚要...
    对方正在输出_阅读 3,255评论 1 8
  • 这次心得可谓一波三折,这周比较忙,前几天在做视频,星期四晚上赶完视频,这让我想到了时间的朋友里提到的“现在...
    阿木東阅读 2,166评论 0 0

友情链接更多精彩内容