贪心
贪心求解的是局部最优解,只有在无后效性的情况下,求解的才可能是全局最优解。
看了简单贪心和区间贪心,就上机考试来说,关于贪心的套路就是找到每一个部分的局部最优解,且无后效性,即当前的选择不会影响后面部分的求解。大多数题目都是选择好一个属性,进行排序,然后设置一个标志,循环的去操作这个已经排好序的属性,直到不满足题意为止。
动态规划
动态规划求解的是最优解问题,与分治法的思想类似,将待求解问题分解成若干子问题,不同在于分治法可能会对一个子问题求解多次,但是动态规划是每次把求解的子问题的答案保存下来,在需要的时候直接取即可。
最大子序列和
动态规划经典问题之一,在一个给定的序列中,找一个连续的子序列,使得子序列的和为最大。
首先设置一个dp[],令dp[i]表示以A[i]作为末尾的连续序列的最大和,于是最大连续子序列和便是数组dp的最大值;这个题有两种情况:1.只有一个元素即A[i]本身,dp[i]=A[i]; 2.有多个序列,从某个A[j]开始,直到A[i],也就是dp[i]=A[j]+…+A[i-1]+A[i],即dp[i] = dp[i-1]+A[i],最后求得max(A[i],dp[i-1]+A[i])即可。
#include<iostream>
using namespace std;
const int maxn = 1000;