分成互質組 DFS

2022-09-22 22:21:26 字數 1143 閱讀 9095

給定 n

'>

n 個正整數,將它們分組,使得每組中任意兩個數互質。

至少要分成多少個組?

輸入格式

第一行是乙個正整數 n

'>

n。第二行是 n

'>n

個不大於10000的正整數。

輸出格式

乙個正整數,即最少需要的組數。

資料範圍1≤

n≤10'>1 ≤ n ≤ 1

輸入樣例:

6

14 20 33 117 143 175

輸出樣例:
3

#include using namespace std;

const int n = 15;

int n, ans = 999;

int a[n];

int group[n][n];

bool book[n];

int q1, q2;

int gcd(int a, int b)

bool check(int i, int x, int cnt)

return true;

}void dfs(int cnt, int x, int group_index, int group_cnt)

// printf("\n");

// for(int i = 0; i < group_index; i++)

// printf("\n");

// }

// printf("-------\n");

if(group_index > ans)return;

if(cnt == n)

int flag = 1;

for(int i = x; i < n; i++)

}if(flag)

// printf("cnt = %d\n",cnt);

dfs(cnt, 0, group_index + 1, 0);

} }int main()

dfs(0,0,0,0);

cout << ans + 1 << endl;

return 0;

}

分成互質組 dfs

分成互質組 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65536kb 描述給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?輸入第一行是乙個正整數n。1 n 10。第二行是n個不大於10000的正整數。輸出乙個正整數,即最少需要的組數。樣例輸入 614 2...

7834 分成互質組

總時間限制 1000ms 記憶體限制 65536kb 描述 給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?輸入 第一行是乙個正整數n。1 n 10。第二行是n個不大於10000的正整數。輸出 乙個正整數,即最少需要的組數。樣例輸入 6 14 20 33 117 143 1...

AcWing 1118 分成互質組

我用的是狀壓dp。先預處理出可以在一組的集合。然後對每種狀態列舉它的子集進行轉移。像這樣子 for i 1 i 1 f i 表示已經把 i 集合裡的數安頓好了需要幾個組。屬性 min。時間複雜度 o n 2 times 2 n 3 n 其中 o n 2 times 2 n 是預處理的複雜度,o 3 ...