public class Del1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String n_m_line = in.nextLine(); String[] tokens = n_m_line.split(" "); int[] n_m = new int[2]; n_m[0] = Integer.parseInt(tokens[0]); n_m[1] = Integer.parseInt(tokens[1]); String str = in.nextLine(); int[][] rule = new int[n_m[1]][2]; String line; for (int i = 0; i < n_m[1]; i++) { line = in.nextLine(); tokens = line.split(" "); rule[i][0] = Integer.parseInt(tokens[0]); rule[i][1] = Integer.parseInt(tokens[1]); } in.close(); String[] continueOnes = str.split("0"); int res = 0; for (String continueOne : continueOnes) { res += getMaxPoint(continueOne, rule); } System.out.println(res); }
private static int getMaxPoint(String ones, int[][] rules) { int[] dp = new int[ones.length() + 1]; for (int i = 0; i < dp.length; i++) { for (int[] rule : rules) { dp[i] = Math.max(dp[i], i - rule[0] >= 0 ? dp[i - rule[0]] + rule[1] : 0); } } return dp[ones.length()]; } }