import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
System.
out.
println(calculateMinCost
(new int[] { 1,
4,
6,
7,
28,
30 })); System.
out.
println(calculateMinCost
(new int[] { 1,
7,
8,
9,
10 })); System.
out.
println(calculateMinCost
(new int[] { 1,
7,
8,
9,
10,
15 })); }
public static int calculateMinCost(int[] arr) {
boolean[] isDayWithTrip = new boolean[31]; // note: initializes to false
for (final int dayWithTrip : arr) {
isDayWithTrip[dayWithTrip] = true;
}
int[] minCostUpThroughDay = new int[31];
minCostUpThroughDay[0] = 0; // technically redundant
for (int d = 1; d <= 30; ++d) {
if (! isDayWithTrip[d]) {
minCostUpThroughDay[d] = minCostUpThroughDay[d-1];
continue;
}
int minCost;
// Possibility #1: one-day pass on day d:
minCost = minCostUpThroughDay[d-1] + 2;
// Possibility #2: seven-day pass ending on or after day d:
minCost =
Math.
min(minCost, minCostUpThroughDay
[Math.
max(0, d
-7)] + 7); // Possibility #3: 30-day pass for the whole period:
minCost
= Math.
min(minCost,
25);
minCostUpThroughDay[d] = minCost;
}
return minCostUpThroughDay[30];
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKGNhbGN1bGF0ZU1pbkNvc3QobmV3IGludFtdIHsgMSw0LDYsNywyOCwzMCB9KSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGNhbGN1bGF0ZU1pbkNvc3QobmV3IGludFtdIHsgMSw3LDgsOSwxMCB9KSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGNhbGN1bGF0ZU1pbkNvc3QobmV3IGludFtdIHsgMSw3LDgsOSwxMCwxNSB9KSk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgaW50IGNhbGN1bGF0ZU1pbkNvc3QoaW50W10gYXJyKSB7CgkJYm9vbGVhbltdIGlzRGF5V2l0aFRyaXAgPSBuZXcgYm9vbGVhblszMV07IC8vIG5vdGU6IGluaXRpYWxpemVzIHRvIGZhbHNlCgkJZm9yIChmaW5hbCBpbnQgZGF5V2l0aFRyaXAgOiBhcnIpIHsKCQkgICAgaXNEYXlXaXRoVHJpcFtkYXlXaXRoVHJpcF0gPSB0cnVlOwoJCX0KCQkKCQlpbnRbXSBtaW5Db3N0VXBUaHJvdWdoRGF5ID0gbmV3IGludFszMV07CgkJbWluQ29zdFVwVGhyb3VnaERheVswXSA9IDA7IC8vIHRlY2huaWNhbGx5IHJlZHVuZGFudAoJCWZvciAoaW50IGQgPSAxOyBkIDw9IDMwOyArK2QpIHsKCQkgICAgaWYgKCEgaXNEYXlXaXRoVHJpcFtkXSkgewoJCSAgICAgICAgbWluQ29zdFVwVGhyb3VnaERheVtkXSA9IG1pbkNvc3RVcFRocm91Z2hEYXlbZC0xXTsKCQkgICAgICAgIGNvbnRpbnVlOwoJCSAgICB9CgkJCgkJICAgIGludCBtaW5Db3N0OwoJCSAgICAvLyBQb3NzaWJpbGl0eSAjMTogb25lLWRheSBwYXNzIG9uIGRheSBkOgoJCSAgICBtaW5Db3N0ID0gbWluQ29zdFVwVGhyb3VnaERheVtkLTFdICsgMjsKCQkgICAgLy8gUG9zc2liaWxpdHkgIzI6IHNldmVuLWRheSBwYXNzIGVuZGluZyBvbiBvciBhZnRlciBkYXkgZDoKCSAgICAgICAgbWluQ29zdCA9CgkgICAgICAgIAlNYXRoLm1pbihtaW5Db3N0LCBtaW5Db3N0VXBUaHJvdWdoRGF5W01hdGgubWF4KDAsIGQtNyldICsgNyk7CgkJICAgIC8vIFBvc3NpYmlsaXR5ICMzOiAzMC1kYXkgcGFzcyBmb3IgdGhlIHdob2xlIHBlcmlvZDoKCQkgICAgbWluQ29zdCA9IE1hdGgubWluKG1pbkNvc3QsIDI1KTsKCQkKCQkgICAgbWluQ29zdFVwVGhyb3VnaERheVtkXSA9IG1pbkNvc3Q7CgkJfQoJCQoJCXJldHVybiBtaW5Db3N0VXBUaHJvdWdoRGF5WzMwXTsKCX0KfQ==