算法第三章作业
动态规划算法的理解: 一、含义 动态规划:多阶段(两段)最优化决策解决问题的过程就称为动态规划。 二、基本步骤 1、描述优解的结构特征。 2、递归地定义一个最优解的值。 3、自底向上计算一个最优解的值。 4、从已计算的信息中构造一个最优解。 三、何时采用动态规划 (1) 最优化原理:问题的最优解包含的字问题也有最优解,就称该问题具有最优子结构,满足最优化原理。 (2)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(处理重叠子问题是动态规划的优势所在) 四、例题 (1) 题目: 思路:很明显要用dp来做。我们以dp[ ]数组(假设现在是dp[ x ])记录此时以 x 为结尾的最长单调递增子序列的长度,a[ ]数组记录初始数据。 则可以得到状态转移方程 : 1 for(int i=1;i<n;i++){ 2 for(int j=0;j<i;j++){ 3 if(a[i]>a[j]&&dp[i]<dp[j]+1){ 4 dp[i]=dp[j]+1; 5 } 6 } View Code AC代码: 1 #include<iostream> 2 using namespace std; 3 int n,max,temp,cnt; 4 int dp[1050],a[1050]; 5 int find(){ 6 int temp=0; 7 for(int i