思路:
分别在两种不同颜色的岛屿群之间进行搭桥。因为相同颜色的岛屿之间不能有边,任意两个相同颜色的岛屿不能同时和另外一个不同颜色的岛屿都有边。
实现:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll mod = 998244353; 5 ll dp[5005][5005]; 6 int main() 7 { 8 ll a, b, c; 9 while (cin >> a >> b >> c) 10 { 11 for (int i = 0; i <= 5000; i++) dp[i][0] = dp[0][i] = 1; 12 for (int i = 1; i <= 5000; i++) 13 { 14 for (int j = 1; j <= 5000; j++) 15 { 16 dp[i][j] = (dp[i - 1][j] + j * 1LL * dp[i - 1][j - 1] % mod) % mod; 17 } 18 } 19 cout << dp[a][b] * dp[a][c] % mod * dp[b][c] % mod << endl; 20 } 21 return 0; 22 }