using
System;
using
System.Collections.Generic;
public
class
GFG
{
static
int
Solve(
int
index, List<List<
int
>> item,
HashSet<
int
> st,
int
K)
{
if
(K == 0)
return
0;
if
(index == 0)
{
if
(st.Contains(item[index][0]) ==
false
&& item[index][1] <= K)
{
return
item[index][2];
}
else
return
Int32.MinValue;
}
int
not_pick = 0 + Solve(index - 1, item, st, K);
int
pick = Int32.MinValue;
if
(item[index][1] <= K
&& st.Contains(item[index][0]) ==
false
)
{
st.Add(item[index][0]);
pick = item[index][2]
+ Solve(index - 1, item, st,
K - item[index][1]);
}
return
Math.Max(pick, not_pick);
}
public
static
void
Main()
{
List<List<
int
>> item
=
new
List<List<
int
>>() {
new
List<
int
> { 1, 3, 13 },
new
List<
int
> { 5, 1, 10 },
new
List<
int
> { 2, 2, 1 },
new
List<
int
> { 1, 4, 9 },
new
List<
int
> { 4, 5, 11 },
new
List<
int
> { 1, 5, 9 } };
int
N = item.Count, K = 6;
HashSet<
int
> st =
new
HashSet<
int
>();
Console.Write(
"Maximum value obtained: "
+ (Solve(N - 1, item, st, K)+1));
}
}