关健字:阶段 状态 决策 函数递推式
动态规划:指一种解决多阶段决策最优化问题的方法,动态指在每一个可能出现的情况中做出决策后引起状态转移。
例题1:现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图1所示,试找出从结点1到结点10的最短路径。

动态规划中的一些术语:
动态规划的使用前提:
动态规划的计算方法:
例题2:
排队买票
问题描述:一场演唱会即将举行。现有N(O〈N〈=200)个歌迷排队买票,一个人买一张,而售票处规定,一个人每次最多只能买两张票。假设第I位歌迷买一张票需要时间Ti(1〈=I〈=n),队伍中相邻的两位歌迷(第j个人和第j+1个人)也可以由其中一个人买两张票,而另一位就可以不用排队了,则这两位歌迷买两张票的时间变为Rj,假如Rj〈Tj+Tj+1,则这样做就可以缩短后面歌迷等待的时间,加快整个售票的进程。现给出N,Tj和Rj,求使每个人都买到票的最短时间和方法。
先判断是否满足上述条件:当所有人买票最快时,显然n-1个人买票一定也最快,n-2个人也最快。并且前面的人怎么买票与后面的人怎么买票无关
那么阶段和状态也很好划分,阶段就是买票的先后顺序,状态就是第i个人买票。,那么记s[i]为第i个人买完票之后所花的最短时间
则这个人可以自己买票,也可以和自己前面的人一起买,s[i]=min(s[i-1]+Ti,s[i-2],Ri-1);
这样从前往后进行遍历就可以求出时间,初始化s[1]=T1;
当然也可以倒推 记dp[i]为倒着买票到第i个人,则有dp[i]=min(dp[i-1]+Ti,dp[i-2]+R(i+1));自己买或者和前面的人一起买
那么初始状态dp[n]=Tn,dp[n+1]=0,其余全为998244353(INF)
例题3:
给你一张图,求A到J的最短路

你看这张图,它又长又宽!
原文:https://www.cnblogs.com/XLINYIN/p/11504101.html