老赵的讲义2

I 递归时写程序的途径:
if(n>2) return
else if(n==2)
else if(n==1)
else return -1...
(1)算法的健壮性
(2)把常出现的放在前面

II 提高递归效率:添加结果数组

III 动态规划
DP是一种思想,不是一个算法
算法-冒泡排序                   采用一个固定的方法,能解决一定的问题
技巧-递归、优化(写程序的技法) 没有固定的适用范围
策略-动态规划、穷举、分治等     一种思想,没有具体的写法

recursion

简单的动态规划:一个人上100阶台阶,1步、2步、3步每次
递归适用于动态规划和分治,用递归来写很简单 动态规划秉承分治的思想。

掌握学习策略的方法-基本概念、基本思想、基本步骤-把问题分解
动态规划的思想:一个大的问题,分成n步,求第n“阶段”的最优解 为从n-1阶段的最优解开始若干阶段最优解推出来的,用到某一个“策略”。
无后效性:后一阶段的决策不影响前一阶段的最优解
有后效性的原因:阶段划分的不正确性
写出无后效性的状态-没有固定的方法
空间顺序法和时间顺序法
状态的描述:******使用参数。---重中之重。

*******状态-》阶段-》决策-》方程-》求解
关键:描述状态。
eg 乘法
f(1,7,3)=max
{   
    2*f(2,7,2);
    27*f(3,7,2);
    278*f(4,7,2);
    2783*f(5,7,2);
}
‘7’:一般定义出来,可能用到(本题无用)且一般不要定义常量。
插入几个乘号:第几个阶段

用什么描述最终状态?
第一个到第七个之间插入三个乘号。
和插入乘号的位置有关,空间顺序
一般需要起点和终点。
与时间有关的:开始 结束 中间进行操作
有些题目看似和时间有关,其实和空间有关;有些反之。

Elevator Stopping Plan
最晚到达办公室的人所花时间最少
表面上看:求时间的问题
实际:和空间有关
在一段中找到在哪个位置停(同)-不知道停多少次(异)
--多少层不同的下电梯方式是最大的停下次数,从停这些次向下枚举。
----思路?能否证明5》4》3《2《1?
----不能!
----……查表也能解决。
方法:套用自己熟悉的问题。
对于一个电梯停下的策略,每个人的策略--可能出现后效性。
到四层选择下:5s
到五层选择下:《5s
“早知道5层停就在5层下了。”

P1117+
“相同的数字算一种”:给一般的划分加入了后效性。
如何通过改进去掉后效性?
加入一个参量(分得最小的数字,才能保证没有重复数字的出现)
f(7,3,1)
+f(7,3,2)无重复数字
+f(7,3,3)?不行(超过):7/3
BY MoonGrace
不下降子序列
2 7 8 3 9 2 1
1 2 3 1 2 1 1
1 2 3 2 4 1 0


Matrix
f(1,n,1)
f(i,j,k) =a[i]*2^k +f(i+1,j,k+1) || a[j]*2^k + f(i,j-1,k+1) 从第I个位置到第J个位置 无后效性。结果存结果空间里。
if(i==j) 直接取。

此处k可以不写!!--但是写出来可以保证方程的准确,所以写。
每行的取数方案是独立的

用动态规划解题 要首先考虑 状态的划分 不用if 而应用状态的划分来消除后效性。
posted @ 2008-10-31 11:20  SЁv⑦ēЙ  阅读(214)  评论(0)    收藏  举报