<script>
let dp =
new
Array(20);
for
(let i = 0; i < 20; i++)
{
dp[i] =
new
Array(20);
for
(let j = 0; j < 20; j++)
{
dp[i][j] =
new
Array(20);
for
(let k = 0; k < 20; k++)
{
dp[i][j][k] =
new
Array(20);
for
(let l = 0; l < 20; l++)
{
dp[i][j][k][l] = -1;
}
}
}
}
function
maxXorValue(i, s1, s2, s3, ones1,
ones2, ones3, n)
{
if
(i >= n)
return
0;
if
(dp[i][ones1][ones2][ones3] != -1)
return
dp[i][ones1][ones2][ones3];
let option1 = 0, option2 = 0,
option3 = 0, option4 = 0,
option5 = 0, option6 = 0,
option7 = 0, option8 = 0;
if
(ones1 > 0 && ones2 > 0 &&
ones3 > 0)
option1 = (1 << ((n - 1) - i)) +
maxXorValue(i + 1, s1, s2,
s3, ones1 - 1,
ones2 - 1,
ones3 - 1, n);
if
(ones1 > 0 && ones2 > 0 &&
(n - i > ones3))
option2 = 0 + maxXorValue(i + 1, s1, s2,
s3, ones1 - 1,
ones2 - 1,
ones3, n);
if
(ones2 > 0 && ones3 > 0 &&
(n - i > ones1))
option3 = 0 + maxXorValue(i + 1, s1, s2,
s3, ones1,
ones2 - 1,
ones3 - 1, n);
if
(ones3 > 0 && ones1 > 0 &&
(n - i > ones2))
option4 = 0 + maxXorValue(i + 1, s1, s2,
s3, ones1 - 1,
ones2,
ones3 - 1, n);
if
(ones1 > 0 && (n - i > ones2) &&
(n - i > ones3))
option5 = (1 << ((n - 1) - i)) +
maxXorValue(i + 1, s1, s2,
s3, ones1 - 1,
ones2, ones3, n);
if
(ones2 > 0 && (n - i > ones3) &&
(n - i > ones1))
option6 = (1 << ((n - 1) - i)) +
maxXorValue(i + 1, s1,
s2, s3, ones1,
ones2 - 1,
ones3, n);
if
(ones3 > 0 && (n - i > ones2) &&
(n - i > ones1))
option7 = (1 << ((n - 1) - i)) +
maxXorValue(i + 1, s1,
s2, s3, ones1,
ones2,
ones3 - 1, n);
if
((n - i > ones2) && (n - i > ones3) &&
(n - i > ones1))
option8 = 0 + maxXorValue(i + 1, s1,
s2, s3, ones1,
ones2, ones3, n);
return
dp[i][ones1][ones2][ones3] =
Math.max(option1,
Math.max(option2,
Math.max(option3,
Math.max(option4,
Math.max(option5,
Math.max(option6,
Math.max(option7,
option8)))))));
}
function
onesCount(s)
{
let count = 0;
for
(let x = 0; x < s.length; x++)
{
if
(s[x] ==
'1'
)
++count;
}
return
count;
}
function
maxXORUtil(s1, s2, s3, n)
{
let ones1 = onesCount(s1);
let ones2 = onesCount(s2);
let ones3 = onesCount(s3);
document.write(maxXorValue(0, s1, s2, s3,
ones1, ones2,
ones3, n));
}
let s1 =
"11110"
;
let s2 =
"10101"
;
let s3 =
"00111"
;
let n = s1.length;
maxXORUtil(s1, s2, s3, n);
</script>