今天终于对记忆化搜索有点认识了

本文通过一个具体的定向越野问题实例,介绍了如何运用记忆化搜索优化递归搜索的方法,实现状态压缩并有效减少重复计算,从而提高算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DP与记忆化搜索关联密切,原来一直搜索题瞬间就能写出代码,一遇到记忆化,就晕了,发现怎么也没法记,今天发现我的搜索方向不对。

以后自顶向下搜索,这样的话,前面状态先计算出来,而要用到的是后面的状态,所以不知道怎么记录。用题目说明。


 

C. 定向越野2

时间限制:3000 ms 内存限制:65535 KB
描述

这会,定向越野进行到白热化阶段,38211X小班的N个同学正分布在北航平面上各处。当然,这时候还有3820XX小班,3801XX小班等等各个小班的很多同学都在参加这个比赛。由于大家玩得都很起劲,本着友谊第一比赛第二的原则,裁判决定,换个方式,也就是不按原来的方式进行裁定。而新的方式具有一定随机性,所以谁是赢家也就算随机的了。
裁定方式如下
对平面上N个同学,两两结成队友关系,对于每个队友关系,求两个人之间距离,a1,a2,a3...aN/2代表每个小队的距离值
然后结果值即为sum=求和(a1,a2,a3,a4...aN/2)。
显然,虽然38211X小班的同学此时的位置是固定的,但是他们结队的方式是可以由自己决定的,身为班长的你,会怎么来安排这样结队关系,让sum的值最小呢?

输入

对每组数据
数字N(1<=N<=8)
代表共N对结队关系
下面的2*N行每行为这位同学在平面上的坐标x,y(1<=x<=1000&&1<=y<=1000,且x和y都为整数)
多个同学不会在同一个位置
以0表示文件结尾

输出

对每组数据,输出最小的sum值,结果保留2位小数

样例输入
3
10 10
1 1
2 2
3 3
4 4
5 5
0
样例输出
9.90

开始我的过程如此: 这个过程,只是把前面的状态保存了,结果怎么就不能记录下来,后来发现,我要用后面的状态!!!! And then,把代码改一下~~ 只是记录状态改了而已,结果就可以了……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值