HAOI2006 均分資料

2022-08-13 15:24:15 字數 980 閱讀 8855

今天下午剛學了模擬退火

借這個題來總結下模擬退火的要注意的問題吧

1 : \(eps\)不要設的太大

2 : 初溫\(t\)在2000左右就差不多可以了

3 : 注意題目要求是要求最大值還是最小值,當x<0時\(exp(x)\)的取值範圍才是\(0~1\)

4 : 可以在退完火以後再單獨從當前最優答案下進行微調

5 : 可以進行多次退火

然後這題就是每次退火就是隨機交換序列中的兩個數,對序列dp一下就好了

#include#include#include#include#include#includeconst int m = 25 ;

const int n = 8 ;

const double inf = 1e50 ;

const double eps = 1e-3 ;

using namespace std ;

int n , m ;

int val[m] , e[m] ;

double f[n][m] , p[m] , sum[m] ;

double bax , ans = inf ;

inline double rand()

inline double f()

return f[m][n] ;

}inline void solve()

for(int i = 1 ; i <= 10000 ; i ++)

}int main()

bax /= m ; f() ;

int times = 20 ; while(times--) solve() ;

printf("%.2lf\n",sqrt(ans / m)) ;

return 0 ;

}

HAOI2006 均分資料

題目鏈結 經過了14次的提交,終於正大光明的把本題a掉了。演算法 主要思想是模擬退火,具體操作就是,我們對於每乙個生成的排列,用連續分組dp處理此情況下的最小均方差。dp i j 表示前i個數中分j組的最小均方差,dp i j min dp i j dp k 1 j 1 prefix i prefi...

HAOI2006 均分資料

haoi2006 均分資料 題目稍微解釋一下 把n個數以分為m組,計算每一組的和,求得到的這m個數的方差。由於分法是任意的,我們要求這些方差中的最小值 我們先用stl中的函式random shuffle 用來對乙個元素序列進行重新排序 隨機的 眾所周知 如果每個組數的大小都相近的話,方差就越小 所以...

HAOI2006 均分資料

here 今天練習的第二道模擬退火 wa 了好幾次發現是最後沒有開根號!參考了一下 attack 的題解,主要思路是先隨機分組,然後隨機選乙個數分到權值最小的組裡來退火。ps 玄學質數好用 includeusing namespace std typedef double d const int n...