1. import java.util.Scanner;
    2. public class Main3 {
    3. public static int completeBag(Rule[] rules, int size) {
    4. int len = rules.length;
    5. int dp[][] = new int[len+1][size+1];
    6. // 遍历物品
    7. for (int i = 1; i <= rules.length; i++) {
    8. for (int j=0; j<=size; j++) {
    9. for (int k = 0; k*rules[i-1].count <= j; k++) {
    10. // 放物品 0件-k件, 放或者不放
    11. dp[i][j] = Math.max(dp[i][j],
    12. dp[i-1][j-k*rules[i-1].count] + k*rules[i-1].score);
    13. }
    14. }
    15. }
    16. return dp[len][size];
    17. }
    18. public static int countMaxScore(Rule[] rules, String nums) {
    19. int count = 0;
    20. int ret = 0;
    21. for (int i = 0; i < nums.length(); i++) {
    22. if (nums.charAt(i)== '1') {
    23. count++;
    24. }else if (nums.charAt(i) == '0' && count > 0){
    25. // 可以选用多个规则
    26. ret += completeBag(rules, count);
    27. count = 0;
    28. }
    29. }
    30. return ret;
    31. }
    32. public static void main(String[] args) {
    33. Scanner sc = new Scanner(System.in);
    34. String[] arg = sc.nextLine().split(" ");
    35. int n = Integer.parseInt(arg[0]);
    36. int m = Integer.parseInt(arg[1]);
    37. String str = sc.nextLine();
    38. Rule[] rules = new Rule[m];
    39. for (int i = 0; i < m; i++) {
    40. int c = sc.nextInt();
    41. int s = sc.nextInt();
    42. rules[i] = new Rule(c, s);
    43. }
    44. str += "0";
    45. System.out.println(countMaxScore(rules, str));
    46. }
    47. }
    48. class Rule {
    49. public Rule(int count, int score) {
    50. this.count = count;
    51. this.score = score;
    52. }
    53. int count;
    54. int score;
    55. }