作者:兰州锝TC
学习资源
2个可以查询编程语言语法的网站:
1.菜鸟教程
2.w3school
2.17日题解
- 待更新
往日内容
- 2.7 lesson29-lesson35数据的存储和输入
- 2.8 lesson36-lesson42 程序的选择执行(if-else、switch)
- 2.10 lesson43-lesson49 for循环
- 2.11 lesson50-lesson56 while循环&do-while循环
- 2.12 lesson57-lesson63 数据的批量处理—数组(array)
- 2.13 lesson64-lesson70 数据的批量处理—数组2(array)
- 2.15 lesson71-lesson77 算法复杂度&二分查找算法&高精度数值处理&函数
- 2.16 lesson78-lesson84 递归函数
- 2.17 lesson85-lesson91 基础排序算法(选择排序、冒泡排序、插入排序)
- 2.18 lesson92-lesson98 贪心算法
今日内容:动态规划
- “洪湖水浪打浪,新浪盖旧浪,旧浪死在沙滩上。”这一场景,非常类似我们解决问题的递推方法(关于递推,后面有介绍)。递推就是按照递推公式不断往前求解的过程,对于当前,只有一个状态描述当前的值。若某些问题并非由一个状态而是由多个状态不断推导,那么这种方法就是动态规划(Dynamic Programming),简称DP。动态规划是运筹学的一个分支,是将问题分解成各个阶段,由相邻两个阶段根据状态转移方程推导求解的一种方法。
- 什么是动态规划
- 动态规划的递归写法
- 动态规划的递推写法
- 数塔问题的程序:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
int f[maxn][maxn],dp[maxn][maxn];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>f[i][j]; //输入数塔
}
}
//边界
for(int j=1;j<=n;j++){
dp[n][j]=f[n][j];
}
//从第n-1层不断往上计算出dp[i][j]
for(int i=n-1;i>=1;i--){
for(int j=1;j<=i;j++){
dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+f[i][j];
}
}
cout<<dp[1][1]<<endl; //输出结果dp[1][1]
return 0;
}
对应慕课
- 北京大学_郭炜_程序设计与算法(二)第六周的内容