[hdu 5017 ellipsoid]
給定乙個三維空間的橢球面方程,求橢球面上的點到原點(0,0,0)的最小距離。
可以發現,橢球面上到原點的距離,具有乙個極大值點和乙個極小值點。
用模擬退火的方法可以近似搜尋到全域性最小。
這裡因為只有乙個極小值點,所以這裡也不需要以一定概率接受比當前更差的解了。可以說是簡化的模擬退火了。
一定程度上來說,模擬退火理論上可以近似替代二分、三分了。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
double a, b, c, d, e, f;
const
int psz = 10;
const
int inf = 0x3f3f3f3f;
const
long
long infl = 0x3f3f3f3f3f3f3f3f;
const
double pi = acos(-1.0);
const
double eps = 1e-8;
const
int dir_sz = 8;
struct point pt[psz];
double get_dis(double x, double y)
return ret;
}int main()
while(t > eps) }}
t *= r;
++ cnt;
}//cout << cnt << endl;
cout
<< fixed << setprecision(7) << res << endl;
}return
0;}
guojiasheng,模擬退火, HDU 5017 模擬退火
一步一步慢慢學習 模擬退火 好 include include include include include using namespace std const int n 30 5 double a,b,c,d,e,f double dist double x,double y,double z...
hdu 5017 模擬退火求最值
題意 給乙個橢圓 然後求原點到這個橢圓距離最小的點的距離是多少。解析 依舊用模擬退火。修改了乙個地方,初始溫度從100改到了1,就行了。之前的也修改了。選z的時候,選離遠點近的那個點就行了。pragma comment linker,stack 1677721600 include include ...
P5017 擺渡車 題解
p5017 擺渡車 這道題的做法很多,我考慮用斜率優化的方法來做 先定義 f i 表示運走 i 時間之前的人,並且必須在 i 這個時間發車的最小代價 很顯然 f i min f j sum i i t k 我們考慮用乙個類似字首和的東西預處理出 sum i i t k 用 g i 記錄 i 時間前有...