ACM第十二周总结
本周的学习主要是搜索
复习递归,总结一下递归形式
1.找到递归关系,前一状态与后一状态的关系,直到已知状态。
2.设置边界,找到初末递归状态。(知道什么时候停止)
3.设计递归函数。
形式:
f(n){if(n<=1)return 1;else n+f(n-1);}
其次学习搜索,刚开始,感觉搜索就像是枚举(尤其深度优先搜索)从第一种情况开始再到子情况…再返回上一级
for(i=1;i<n;i++)
for(j=1;j<m;j++)
for(k=1;k<z;k++)
本周做题主要是二分法类型
1.但有一题涉及到map
再回忆下map用法
头文件
while(low<=high) {
mid=(low+high)/2; if(judge(mid))
{low=mid+1;res=mid;}
else high=mid-1; }
这种类型比较原始,只要计算出每人可能分得饼的大小再判断是否最大(judge)进行二分即可得出。
3.求最小距离最大,最大距离最小
类似题目就是踩石过河,复制书页(最大求最小)
我自己理解是遍历每一个石子间的间距,找到最大的时候,但数量多的时候必然超时。
所以这里用二分寻找(对石子间距排序),大概是这样。(先不附代码了)
总结:二分题目总是看着简单,但却难以下手,做题比较少,题型还不是很了解。对于新学习的搜索,我认为关键在于递归方程的构建。