import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
// Main code
public static int solve1(int a[], int n){
if(n == 0) return 0;
if(n == 1) return a[0];
int dp[] = new int[n];
dp[0] = a[0];
if(n >= 2){
dp
[1] = Math.
max(a
[0], a
[1]); }
for(int i = 2; i < n; i++){
dp
[i
] = Math.
max(dp
[i
-1], dp
[i
-2] + a
[i
]); }
return dp[n-1];
}
// Homework-1
public static int solve2(int a[], int n){
if(n == 0) return 0;
if(n == 1) return a[0];
if(n
== 2) return Math.
max(a
[0] + a
[1], a
[1]);
int dp[] = new int[n];
dp[0] = a[0];
dp
[1] = Math.
max(a
[1], a
[0] + a
[1]); dp
[2] = Math.
max(Math.
max(a
[2], a
[0] + a
[2]), a
[1] + a
[2]);
for(int i = 3; i < n; i++){
dp
[i
] = Math.
max(Math.
max(dp
[i
-1], dp
[i
-2]), dp
[i
-3]) + a
[i
]; }
return dp[n-1];
}
// Homework-2
public static int solve3(int a[], int n, List<Integer> blockedCells){
if(n == 0) return 0;
Set<Integer> set = new HashSet<>(blockedCells);
int dp[] = new int[n];
if(!set.contains(0)) dp[0] = a[0];
if(n
>= 2 && !set.
contains(1)) dp
[1] = Math.
max(dp
[0],
0) + a
[1];
for(int i = 2; i < n; i++){
if(set.contains(i)) continue;
int takePrev1
= dp
[i
-1] != Integer.
MIN_VALUE ? dp
[i
-1] : 0; int takePrev2
= dp
[i
-2] != Integer.
MIN_VALUE ? dp
[i
-2] : 0; dp
[i
] = Math.
max(takePrev1, takePrev2
) + a
[i
]; }
return dp
[n
-1] != Integer.
MIN_VALUE ? dp
[n
-1] : 0; }
{
int[] arr1 = {3, 2, 5, 10, 7};
System.
out.
println("solve1 result: " + solve1
(arr1, arr1.
length));
int[] arr2 = {1, 2, 9, 4, 5, 0, 3};
System.
out.
println("solve2 result: " + solve2
(arr2, arr2.
length));
int[] arr3 = {3, 2, 7, 10, 12};
List
<Integer
> blocked
= Arrays.
asList(2); // block cell 2 System.
out.
println("solve3 result: " + solve3
(arr3, arr3.
length, blocked
)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewogICAgLy8gTWFpbiBjb2RlCiAgICBwdWJsaWMgc3RhdGljIGludCBzb2x2ZTEoaW50IGFbXSwgaW50IG4pewogICAgICAgIGlmKG4gPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgaWYobiA9PSAxKSByZXR1cm4gYVswXTsKICAgICAgICAKICAgICAgICBpbnQgZHBbXSA9IG5ldyBpbnRbbl07CiAgICAgICAgZHBbMF0gPSBhWzBdOwogICAgICAgIGlmKG4gPj0gMil7CiAgICAgICAgICAgIGRwWzFdID0gTWF0aC5tYXgoYVswXSwgYVsxXSk7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaSA9IDI7IGkgPCBuOyBpKyspewogICAgICAgICAgICBkcFtpXSA9IE1hdGgubWF4KGRwW2ktMV0sIGRwW2ktMl0gKyBhW2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRwW24tMV07CiAgICB9CgogICAgLy8gSG9tZXdvcmstMQogICAgcHVibGljIHN0YXRpYyBpbnQgc29sdmUyKGludCBhW10sIGludCBuKXsKICAgICAgICBpZihuID09IDApIHJldHVybiAwOwogICAgICAgIGlmKG4gPT0gMSkgcmV0dXJuIGFbMF07CiAgICAgICAgaWYobiA9PSAyKSByZXR1cm4gTWF0aC5tYXgoYVswXSArIGFbMV0sIGFbMV0pOwogICAgICAgIAogICAgICAgIGludCBkcFtdID0gbmV3IGludFtuXTsKICAgICAgICBkcFswXSA9IGFbMF07CiAgICAgICAgZHBbMV0gPSBNYXRoLm1heChhWzFdLCBhWzBdICsgYVsxXSk7CiAgICAgICAgZHBbMl0gPSBNYXRoLm1heChNYXRoLm1heChhWzJdLCBhWzBdICsgYVsyXSksIGFbMV0gKyBhWzJdKTsKICAgICAgICAKICAgICAgICBmb3IoaW50IGkgPSAzOyBpIDwgbjsgaSsrKXsKICAgICAgICAgICAgZHBbaV0gPSBNYXRoLm1heChNYXRoLm1heChkcFtpLTFdLCBkcFtpLTJdKSwgZHBbaS0zXSkgKyBhW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZHBbbi0xXTsKICAgIH0KCiAgICAvLyBIb21ld29yay0yCiAgICBwdWJsaWMgc3RhdGljIGludCBzb2x2ZTMoaW50IGFbXSwgaW50IG4sIExpc3Q8SW50ZWdlcj4gYmxvY2tlZENlbGxzKXsKICAgICAgICBpZihuID09IDApIHJldHVybiAwOwogICAgICAgIFNldDxJbnRlZ2VyPiBzZXQgPSBuZXcgSGFzaFNldDw+KGJsb2NrZWRDZWxscyk7CiAgICAgICAgCiAgICAgICAgaW50IGRwW10gPSBuZXcgaW50W25dOwogICAgICAgIEFycmF5cy5maWxsKGRwLCBJbnRlZ2VyLk1JTl9WQUxVRSk7IAogICAgICAgIAogICAgICAgIGlmKCFzZXQuY29udGFpbnMoMCkpIGRwWzBdID0gYVswXTsKICAgICAgICBpZihuID49IDIgJiYgIXNldC5jb250YWlucygxKSkgZHBbMV0gPSBNYXRoLm1heChkcFswXSwgMCkgKyBhWzFdOwogICAgICAgIAogICAgICAgIGZvcihpbnQgaSA9IDI7IGkgPCBuOyBpKyspewogICAgICAgICAgICBpZihzZXQuY29udGFpbnMoaSkpIGNvbnRpbnVlOyAKICAgICAgICAgICAgaW50IHRha2VQcmV2MSA9IGRwW2ktMV0gIT0gSW50ZWdlci5NSU5fVkFMVUUgPyBkcFtpLTFdIDogMDsKICAgICAgICAgICAgaW50IHRha2VQcmV2MiA9IGRwW2ktMl0gIT0gSW50ZWdlci5NSU5fVkFMVUUgPyBkcFtpLTJdIDogMDsKICAgICAgICAgICAgZHBbaV0gPSBNYXRoLm1heCh0YWtlUHJldjEsIHRha2VQcmV2MikgKyBhW2ldOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gZHBbbi0xXSAhPSBJbnRlZ2VyLk1JTl9WQUxVRSA/IGRwW24tMV0gOiAwOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgewogICAgICAgIGludFtdIGFycjEgPSB7MywgMiwgNSwgMTAsIDd9OwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic29sdmUxIHJlc3VsdDogIiArIHNvbHZlMShhcnIxLCBhcnIxLmxlbmd0aCkpOyAKCiAgICAgICAgaW50W10gYXJyMiA9IHsxLCAyLCA5LCA0LCA1LCAwLCAzfTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbHZlMiByZXN1bHQ6ICIgKyBzb2x2ZTIoYXJyMiwgYXJyMi5sZW5ndGgpKTsgCgogICAgICAgIGludFtdIGFycjMgPSB7MywgMiwgNywgMTAsIDEyfTsKICAgICAgICBMaXN0PEludGVnZXI+IGJsb2NrZWQgPSBBcnJheXMuYXNMaXN0KDIpOyAvLyBibG9jayBjZWxsIDIKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbHZlMyByZXN1bHQ6ICIgKyBzb2x2ZTMoYXJyMywgYXJyMy5sZW5ndGgsIGJsb2NrZWQpKTsgCiAgICB9Cn0K