時限:1000ms 記憶體限制:10000k 總時限:3000ms
對於 n=2 個選手,設計乙個滿足以下要求的比賽日程表:
(1)每個選手必須與其他n-1個選手各賽一次;
(2)每個選手一天只能賽一次;
(3)迴圈賽一共進行n-1天。
用分治演算法生成迴圈賽日程表(1到2的n次方個人)
乙個小於等於7的正整數n
迴圈賽日程表(1到2的n次方個人)
(1)將所有的選手分為兩半,n個選手的比賽日程表就可以通
過為n/2個選手設計的比賽日程表來決定;
(2)遞迴地用對選手進行分割,直到只剩下2個選手時;
將比賽日程表設計成乙個n行n-1列的二維表,其中第i行,j列表示第i個選手在第j天比賽的選手。
將第一列取值為1~n對應各位選手,日程表就變成了n行n列的二維表。
採用分治法將所有選手分為兩半,遞迴地進行排表。將n=2k次方問題劃分為4個部分。
(1)左上角:左上角為2^(k-1)個選手在前半程的比賽日程
(2)左下角:左下角為另外2^(k-1)個選手在前半程的比賽日程,由左上角加2 ^ (k-1)得到
(3)右上角:將左下角直接複製到右上角得到另2 ^(k-1)個選手在後半程的比賽日程表
(4)右下角:將左上角直接複製到右上角得到2 ^(k-1)個選手在後半程的比賽日程表
#include
#include
using namespace std;
int k;
int n;
int a[
1000][
10000];
void
settable
(int k)
;int
main()
printf
("\n");
}return0;
}void
settable
(int k)
}
其實只要弄懂了整個解題思路,主要容易出錯的地方就是在日程表複製的時候,座標容易弄錯,需要特別注意! 迴圈賽日程表(分治)
設有 n 2的k次方 個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各自賽一次。2 每個選手一天只能賽一次。3 迴圈賽一共進行n 1天。按分治策略,我們可以將所有的選手分為兩半,n個選手的比賽日程表可以通過n 2個選手設計的比賽日程表來決定。遞迴地...
迴圈賽日程表 分治 遞推 遞迴
設有n 2 k個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能參賽一次 3 迴圈賽在n 1天內結束。請按此要求將比賽日程表設計成有n行和n 1列的乙個表。在表中的第i行,第j列處填入第i個選手在第j天所遇到的選手。其中1...
分治法 迴圈賽日程表
設有n 2k個運動員要進行羽毛球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其它n 1個選手各賽一次 2 每個選手一天只能比賽一次 3 迴圈賽一共需要進行n 1天。由於n 2 k,顯然n為偶數。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就可以通過為n 2個選手設計的比...