C/C++の宿題片付けます 134代目

このエントリーをはてなブックマークに追加
200デフォルトの名無しさん
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
A組、B組、C組にそれぞれn人の生徒がいて、
A組の生徒が一列に並んでいる。
このとき、B組の生徒をA組の生徒の隣に並ばせたいが
なるべく隣同士で身長に差がないようにしたい。
どうやって計算すればいいでしょう?
加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
(身長の配列) double height_a[n], height_b[n], height_c[n];
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2010年1月28日(木)16:00
[5] その他の制限: 特にありません

B組だけを考える場合はn!、C組も考える場合はn!×n!の並び方を生成して、
身長差の合計を計算して最小ならその並び方を保存って感じでいいと思うんだけど
そのやり方が思いつかない・・・

B組のみの場合
(B組をn!通り並ばせるループ){
diff = sum(n人の身長差の合計);
if(diffが最小){
B組の並び順を保存
}
}

こんな感じになると思うんだけど・・・
お助けください。