#include <bits/stdc++.h>
using
namespace
std;
int
dp[301][301][301];
int
recur(
int
i,
int
j,
int
k,
int
A[],
int
B[],
int
N)
{
if
(i == N) {
if
(j == 0 and k == 0)
return
0;
else
return
1e9;
}
if
(dp[i][j][k] != -1)
return
dp[i][j][k];
int
ans = INT_MAX;
ans = min(ans, recur(i + 1, j, k, A, B, N));
ans = min(ans, recur(i + 1, max(0, j - A[i]),
max(0, k - B[i]), A, B, N)
+ 1);
return
dp[i][j][k] = ans;
}
int
findMinimumCount(
int
A[],
int
B[],
int
N,
int
X,
int
Y)
{
memset
(dp, -1,
sizeof
(dp));
int
ans = recur(0, X, Y, A, B, N);
if
(ans == 1e9)
return
-1;
else
return
ans;
}
int
main()
{
int
A[] = { 2, 3, 2 }, B[] = { 1, 4, 3 }, X = 5, Y = 6;
int
N =
sizeof
(A) /
sizeof
(A[0]);
cout << findMinimumCount(A, B, N, X, Y) << endl;
int
A1[] = { 3, 2, 2 }, B1[] = { 4, 3, 1 }, X1 = 8,
Y1 = 8;
int
N1 =
sizeof
(A1) /
sizeof
(A1[0]);
cout << findMinimumCount(A1, B1, N1, X1, Y1) << endl;
return
0;
}