标签:style blog class code color int
动态规划和贪心算法的区别3.边界条件:即最简单的,可以直接得出的局部最优解
比较明显的一个例子就是找硬币的问题。(具体在网上找找)
==============================================================================
动态规划思考:
1)找状态:一般问题的解就是状态。但是如何问题的解与问题的规模i没有联系时,则要去寻找合适的状态。在找状态时也要遵循状态一定要与问题的规模i有关。不然则不是状态。
2)状态转移方程:把问题的规模缩小至0.从到n,先去求简单的特殊的d[0],d[1],.....然后推出d[i]的求法。
问题描述:该问题就是可以说明贪心和动态规划的区别。在一序列中,找出最长的相邻子序列长度,其中相邻数据差值一正一负的变化。
#include<iostream> using namespace std; #define MAXSIZE 100 int result[MAXSIZE]; int len(int *a,int len) { int length=1; if(len==1) return 1; if(len==2) return 2; result[2]=2; int i; for(i=3;i<=len;i++) { if((a[i-1]-a[i-2])*(a[i-2]-a[i-3])<0) //每一个当前状态都只于前一个最优子状态相关 //这就有点是贪心算法了,但此处写的时候还是用的动态规划 result[i]=result[i-1]+1; else result[i]=2; if(result[i]>length) length=result[i]; } return length; } int main() { int a[]={1,17,5,10,13,15,10,5,16,8}; cout<<len(a,10)<<endl; return 0; }
动态规划与贪心算法区别以及如何思考动态规划,布布扣,bubuko.com
标签:style blog class code color int
原文地址:http://blog.csdn.net/bb2b2bbb/article/details/25217069