标签: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