題意:給定n個點,在範圍內找到x軸上的乙個點,使得n個點到這個點的距離之和最小
模擬退火法
模擬退火的過程
1 找到這些點所在的範圍,用兩個點框定
2 在這個範圍內生成num個點(num自定)
3 對於每個生成的點i,在其周圍生成num個點,一旦有點優於i,則替換。
4 縮小範圍d,若d《精度,退出,否則執行 3
5 遍歷所有num個點,找到val的最小值
#include #include #include #include #include #include #include #include #include#includeusing namespace std;
const int num=100;
const int rad=1000;
struct point
point(double _x,double _y):x(_x),y(_y){}
}p[100001],may[num];
double rand()//隨機產生0-1的浮點數
int n;
double mini , maxi ;
double dis(point a,point b)
double judge(point t)//評價函式,得到點t的評價值val
double val = maxi-mini ;
solve(val);
}int cc ;
cin>>cc ;
}
模擬退火求n個點到某點距離和最短
找出乙個點使得這個店到n個點的最長距離最短,即求最小覆蓋圓的半徑 用乙個點往各個方向擴充套件,如果結果更優,則繼續以當前步長擴充套件,否則縮小步長 include include includeconst double pi acos 1.0 struct point p 1010 int n po...
P1395 會議(樹上找一點到所有點距離和最小)
題意 一顆n個點的樹,n 1條邊,每條邊的權值為1,找到乙個點,使得所有點到這個點的距離之和最小。思路 我們假設點1為根時,總花費為f 1 假設點2是點1的子節點,那麼f 2 f 1 點2的子節點個數 n 點2的子節點個數 因為我們把根從1換到2的時候,2的子樹中節點貢獻全部 1,其他節點貢獻全部 ...
求乙個集合所有可能的子集
增量構造法 一次選出乙個元素放到集合中 include includeusing namespace std const int max 100 int layer 1 遞迴層數 int count1 0 void print subset int n,int a,vector vi,int cur...