很嫩的时候就听说过模拟退火可以做npc问题,我那个崇拜啊,一直不敢动这种神级算法,今天玩了玩发现太imba了!
poj3301题目大意:平面上有N个点,求一个可以覆盖所有点的面积最小的正方形。
使用模拟退火就是枚举旋转角,逐渐减小步长逼近答案。
具体我有个比较漂亮的实现,假设方向向量为(a,b),那么面积为:
(max{a*x[i]+b*y[i]}-min{a*x[i]+b*y[i]})2/(a2+b2);当然,这个值还要在(a,b)和(-b,a)中取个max,因为是正方形两个相互垂直的方向嘛。
突发奇想:这道题可不可以做到立体空间中去呢?嗯,这个好玩。
无悬念的0ms了: