Category Archives: Round #105 (Div. 2)
E. Porcelain
DP with loops first you get the max sum for each row when you want to take 0 , 1 ..m cells from it after doing this and filling the Array Max[i][j] (it means that if i am at row i and i want to take j cells from it so the max value is Max[i][j]) i start to traverse over the dp array from top to bottom i see what max value could i take from row i and row i-1 until n row so at cell dp[n-1][m] i will get the max value ever
Thanks to Youssef Salama 🙂
package Round_105; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class five { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); String[] line = buf.readLine().split(" "); int n = Integer.parseInt(line[0]); int m = Integer.parseInt(line[1]); int[][] dp = new int[n][m + 1]; int[][] Max = new int[n][m + 1]; int[] row; int[] r = new int[n]; for (int i = 0; i < n; i++) { line = buf.readLine().split(" "); int x = Integer.parseInt(line[0]); row = new int[x + 1]; r[i] = x; for (int j = 1; j <= x; j++) row[j] = Integer.parseInt(line[j]); fill(Max, row, m, i); } for (int i = 0; i <= m; i++) dp[0][i] = Max[0][i]; for (int i = 1; i < n; i++) { for (int j = 0; j <= m; j++) { for (int z = 0; z <= j && z <= r[i]; z++) { dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - z] + Max[i][z]); } } } System.out.println(dp[n - 1][m]); } private static void fill(int[][] Max, int[] row, int m, int i) { for (int j = 1; j <= m && j < row.length; j++) { for (int k = 0; k < row.length; k++) for (int l = 0; l < row.length && l + k <= j; l++) if (l + k == j) { int sum = 0; int b = 1; while (b <= k) sum += row[b++]; b = 1; while (b <= l) sum += row[row.length - (b++)]; Max[i][j] = Math.max(Max[i][j], sum); } } } }
D. Bag of mice
package Round_105; import java.math.BigDecimal; import java.util.Arrays; import java.util.Scanner; public class four { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = sc.nextInt(); int b = sc.nextInt(); double[][][] dp = new double[w + 1][b + 1][3]; for (int i = 0; i <= w; i++) for (int j = 0; j <= b; j++) Arrays.fill(dp[i][j], -1); double prob = find(1, w, b, dp); BigDecimal bd = new BigDecimal(prob); bd = bd.setScale(9, BigDecimal.ROUND_HALF_UP); System.out.println(bd); } private static double find(int term, double w, double b, double[][][] dp) { if (w == 0) return 0; if (w < 0 || b < 0) return 0; if (dp[(int) w][(int) b][term] != -1) return dp[(int) w][(int) b][term]; else { double prob = 0; if (term == 1) { prob += w / (w + b); prob += (b / (w + b)) * find(2, w, b - 1, dp); } else { if (w + b > 1) { prob += (b / (w + b)) * ((b - 1) / (w + b - 1)) * find(1, w, b - 2, dp); prob += (b / (w + b)) * ((w) / (w + b - 1)) * find(1, w - 1, b - 1, dp); } } return dp[(int) w][(int) b][term] = prob; } } }
B. Escape
package Round_105; import java.util.Scanner; public class two { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int vp = sc.nextInt(); int vd = sc.nextInt(); int t = sc.nextInt(); int f = sc.nextInt(); int c = sc.nextInt(); double time = c * 1.0 / vp - t; int count = 0; double dist = vp * t; time = (c - dist) / vp; while (time > 0) { double tdash = dist * 1.0 / (vd - vp); if (tdash<0) { count=0; break; } time -= tdash; if (time > 0) count++; dist += vp * tdash; time -= dist / vd + f; dist += vp * (dist / vd + f); } System.out.println(count); } }
A. Insomnia cure
package Round_105; import java.util.Scanner; public class Insomniacure { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = sc.nextInt(); int l = sc.nextInt(); int m = sc.nextInt(); int n = sc.nextInt(); int d = sc.nextInt(); boolean[] v = new boolean[d + 1]; for (int i = k; i <= d; i += k) v[i] = true; for (int i = l; i <= d; i += l) v[i] = true; for (int i = m; i <= d; i += m) v[i] = true; for (int i = n; i <= d; i += n) v[i] = true; int count = 0; for (int i = 0; i <= d; i++) if (v[i]) count++; System.out.println(count); } }