สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n เราจำเป็นต้องทาสีองค์ประกอบด้วยสีที่ −
-
หากเราพิจารณาสีใดๆ องค์ประกอบทั้งหมดของสีนี้จะต้องหารด้วยองค์ประกอบน้อยที่สุดของสีเดียวกันได้
-
ควรลดจำนวนสีที่ใช้
เราต้องหาจำนวนสีขั้นต่ำเพื่อระบายสีตัวเลขที่ระบุทั้งหมดด้วยวิธีที่ถูกต้อง
ดังนั้น หากอินพุตเป็นเหมือน A =[10, 2, 3, 5, 4, 2] ผลลัพธ์จะเป็น 3 เพราะทาสีแรกให้กับองค์ประกอบ A[0] และ A[3] ให้ระบายสีสีที่สอง ไปที่องค์ประกอบ A[2] และระบายสีที่สามให้กับองค์ประกอบทั้งสามที่เหลือ
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of A ans := 0 sort the array A for initialize i := 0, when i < n, update (increase i by 1), do: ok := 1 for initialize j := 0, when j < i, update (increase j by 1), do: ok := ok AND (1 if A[i] mod A[j] is not 0, otherwise 0) ans := ans + ok return ans
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A)
{
int n = A.size();
int ans = 0;
sort(A.begin(), A.end());
for (int i = 0; i < n; i++)
{
int ok = 1;
for (int j = 0; j < i; j++)
ok &= (A[i] % A[j] != 0);
ans += ok;
}
return ans;
}
int main()
{
vector<int> A = { 10, 2, 3, 5, 4, 2 };
cout << solve(A) << endl;
} อินพุต
{ 10, 2, 3, 5, 4, 2 } ผลลัพธ์
3