HAOI2006 均分資料

2021-08-29 20:53:51 字數 1047 閱讀 3615

題目鏈結

經過了14次的提交,終於正大光明的把本題a掉了。。。。

演算法:主要思想是模擬退火,具體操作就是,我們對於每乙個生成的排列,用連續分組dp處理此情況下的最小均方差。

dp[i][j]表示前i個數中分j組的最小均方差,dp[i][j]=min(dp[i][j],dp[k-1][j-1]+prefix[i]-prefix[j-1]-prefix[n]/m (1<=k<=i))

(prefix是字首和應該很顯然吧。。。。。) 

code:

#includeusing namespace std;

#define rep(i,j,k) for(register int i=j;i<=k;i++)

int n,m;

int co[30];

templatevoid chkmin(t &x,t y)

while(c>='0'&&c<='9')

num*=f;

}int temp1[30];int temp2[30];

double dp[30][30];double prefix[30];

inline double work(int a)

dp[0][0]=0;

rep(i,1,n)}}

return dp[n][m];

}inline bool okay(double x,double y)

inline double sa()

double nop1=work(temp1);double re_value=nop1;

while(temper>=0.01)else

temper*=0.99;

}return re_value;

}int main()

rep(i,1,n)

double ans=int_max;

rep(i,1,72)

double temp=m;

printf("%.2f\n",(sqrt(ans/temp)));

return 0;

}

HAOI2006 均分資料

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

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...