2021-05-23

本周的ACM学习重点是搜索算法和递归。通过递归关系的建立、边界条件设定及递归函数设计,深入理解了递归。在搜索方面,体会到其与枚举的相似性,特别是深度优先搜索。实践中,运用二分法解决了一些问题,包括分饼问题和求最小距离最大等。遇到挑战时,如大量数据的处理,采用二分法能有效避免超时。通过不断练习,逐步掌握二分法的应用并熟悉其难点。同时,回顾了map容器的使用,加强了对数据结构的理解。
摘要由CSDN通过智能技术生成

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用法
头文件
map<string,int>m;
string 表示下标类型,int表示存储类型m表示构建map类型数组m;
2.典型二分问题
分饼问题有n个饼m个人,平均分且没人分到最大,不能有残渣(只分一块)

while(low<=high) {
mid=(low+high)/2;                        if(judge(mid)) 
{low=mid+1;res=mid;}
 else  high=mid-1;  }

这种类型比较原始,只要计算出每人可能分得饼的大小再判断是否最大(judge)进行二分即可得出。
3.求最小距离最大,最大距离最小
类似题目就是踩石过河,复制书页(最大求最小)
我自己理解是遍历每一个石子间的间距,找到最大的时候,但数量多的时候必然超时。
所以这里用二分寻找(对石子间距排序),大概是这样。(先不附代码了)

总结:二分题目总是看着简单,但却难以下手,做题比较少,题型还不是很了解。对于新学习的搜索,我认为关键在于递归方程的构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值