using
System;
using
System.Collections.Generic;
namespace
MaximumCoverageProblem {
public
class
GFG {
static
int
FindMaxNewElements(List<HashSet<
int
> > subsets,
HashSet<
int
> covered,
int
m)
{
int
maxNewElements = 0;
int
maxSubsetIndex = -1;
for
(
int
i = 0; i < m; ++i) {
int
newElements = 0;
foreach
(
int
element
in
subsets[i])
{
if
(!covered.Contains(element)) {
++newElements;
}
}
if
(newElements > maxNewElements) {
maxNewElements = newElements;
maxSubsetIndex = i;
}
}
return
maxSubsetIndex;
}
static
void
Main(
string
[] args)
{
int
m, k;
m = 4;
k = 2;
List<HashSet<
int
> > subsets
=
new
List<HashSet<
int
> >{
new
HashSet<
int
>{ 1, 2 },
new
HashSet<
int
>{ 2, 3 },
new
HashSet<
int
>{ 3, 4 },
new
HashSet<
int
>{ 4, 5 }
};
HashSet<
int
> covered =
new
HashSet<
int
>();
List<
int
> solution =
new
List<
int
>();
for
(
int
i = 0; i < k; ++i) {
int
maxSubsetIndex
= FindMaxNewElements(subsets, covered, m);
if
(maxSubsetIndex != -1) {
solution.Add(maxSubsetIndex);
covered.UnionWith(subsets[maxSubsetIndex]);
}
else
{
break
;
}
}
Console.Write(
"Chosen subsets: "
);
foreach
(
int
index
in
solution)
{
Console.Write(index +
" "
);
}
Console.WriteLine(
"\nNumber of elements covered: "
+ covered.Count);
}
}
}