一、动态规划思想:
动态规划的目标:求解最优化问题。
核心的原理是:多阶段决策问题的最优化原理及把多阶段过程转化为单阶段问题
- 动态体现在,多阶段决策在划分成单阶段后做出的决策会对下一阶段起到影响,区别于贪心算法。
- 最优化原理:一个最优化策略的子策略总是最优的。
二、应用
1.每对结点间的最短路径(弗洛伊德算法)
问题: 有向图中求两点之间最短的路径,如图求任意两点之间最短的路。
思路: 任意两点之间可能存在第三个点使得距离两点之间距离变近(可能存在二个三个更多)
所以核心算法也就是
if(d[i][j]>d[i][k]+d[k][j] )
d[i][j]=d[i][k]+d[k][j];
主要是要理解几个图,零阶矩阵来表示图,用path[ ][ ]来记录路程。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int d[10][10],k,i,j,n,m,t1,t2,t3;
int path[10][10];
int inf=99999999; //用inf(infinity的缩写)存储一个我们认为的正无穷值
//读入n和m,n表示顶点个数,m表示边的条数
cin>>n>>m;
//初始化
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j) d[i][j]=0;
else d[i][j]=inf;
path[i][j]=-1;
}
//读入边
for(i=1;i<=m;i++)