HAOI2006 均分資料

2021-10-17 08:58:55 字數 1251 閱讀 5756

[haoi2006]均分資料

題目稍微解釋一下:

把n個數以分為m組,計算每一組的和,求得到的這m個數的方差。由於分法是任意的,我們要求這些方差中的最小值

我們先用stl中的函式random_shuffle()用來對乙個元素序列進行重新排序(隨機的)

眾所周知:如果每個組數的大小都相近的話,方差就越小

所以我們每次將第i個數加給當前數之和最小的那個組,這樣操作可以使得在當前排列下,m組數最相近,也就是方差最小

迴圈個5e5次就夠了,太多就會超時(5e6的話洛谷和牛客的機子都會超時)

貌似dp也可以做??

#include

typedef

long

long ll;

using

namespace std;

inline

intread()

while

(ch>=

'0'&&ch<=

'9') s=s*

10+ch-

'0',ch=

getchar()

;//s=(s<<3)+(s<<1)+(ch^48);

return s*w;

}const

int maxn=

100;

int a[maxn]

;int x[maxn]

;double tot;

double ans=

0x3f

;int n,m;

inline

void

calc()

x[p]

+=a[i]

;//每次把數加給最小的組

}double sum=0;

for(

int i=

1;i<=m;i++

) sum=sum/

(double

)m; sum=

sqrt

(sum);if

(sum

}int

main()

tot/=(

double

)m;int t=

5000000

;while

(t--

)printf

("%.2f\n"

,ans)

;}

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 均分資料

今天下午剛學了模擬退火 借這個題來總結下模擬退火的要注意的問題吧 1 eps 不要設的太大 2 初溫 t 在2000左右就差不多可以了 3 注意題目要求是要求最大值還是最小值,當x 0時 exp x 的取值範圍才是 0 1 4 可以在退完火以後再單獨從當前最優答案下進行微調 5 可以進行多次退火 然...

HAOI2006 均分資料

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