一.描述:
简单来说就是在一整个过程中,可分割成各个小部分,每个小部分都需要做出决策,同时这个决策既受前面决策的影响,又会影响后面的决策。
二.题目分类:
1. 滑动数组
(1)典型例题:爬楼梯,杨辉三角,斐波那契数列
(2)主要代码展示:
//爬楼梯,一次1阶或者2阶,求方案数
public class Solution {
public int ClimbStairs(int n) {
int p=0,q=0,r=1;
for(int i=1;i<=n;i++){
p=q;
q=r;
r=p+q;
}
return r;
}
}
2. 精巧解思
(1)典型例题:买卖股票的最佳时机,下载插件
(2)买卖股票的最佳时机:今天以前的最小买入价钱
(3)下载插件:a+a==0+2a,贪心算法
3. dp数组
(1)典型例题:传递消息
(2)主要代码展示
//传递消息
public class Solution {
public int NumWays(int n, int[][] relation, int k) {
int[,] dp=new int[k+1,n];
dp[0,0]=1;
for(int i=0;i<k;i++){
foreach(int[] edg in relation){
int src=edg[0],dst=edg[1];
dp[i+1,dst]+=dp[i,src];
}
}
return dp[k,n-1];
}
}
ps:本文旨在记录不同类型题目的不同解题方法,因此例题并没有完整举例,同时代码不进行详细阐述。