using
System;
using
System.Linq;
public
class
GFG{
class
pair : IComparable<pair>
{
public
int
first, second;
public
pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
public
int
CompareTo(pair p)
{
return
this
.first-p.second;
}
}
static
int
countValidSubsets(
int
[]A,
int
[]B,
int
N)
{
int
ans = 0;
pair []AB =
new
pair[N];
int
mx =
int
.MinValue;
for
(
int
i = 0; i < N; i++) {
AB[i] =
new
pair( A[i], B[i] );
mx = Math.Max(mx, A[i]);
}
Array.Sort(AB);
AB.Reverse();
int
[,] dp=
new
int
[N + 1,mx + 1];
dp[0,0] = 1;
for
(
int
i = 1; i <= N; i++) {
for
(
int
j = 0; j <= mx; j++) {
if
(j + AB[i - 1].second <= mx) {
dp[i,j + AB[i - 1].second]
+= dp[i - 1,j];
}
dp[i,j] += dp[i - 1,j];
}
}
for
(
int
i = 1; i <= N; ++i) {
int
cnt = 0;
for
(
int
j = 0; j <= mx; j++) {
if
(j + AB[i - 1].second
<= AB[i - 1].first) {
cnt += dp[i - 1,j];
}
}
ans += cnt;
}
return
ans;
}
public
static
void
Main(String[] args)
{
int
[]A = { 1, 3, 2, 6 };
int
[]B = { 7, 3, 2, 1 };
int
N = A.Length;
Console.Write(countValidSubsets(A, B, N));
}
}