import java.util.*;
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(br.readLine());int D = Integer.parseInt(st.nextToken());int G = Integer.parseInt(st.nextToken());int[][] arr = new int[G + 1][4];int[] dp = new int[D + 1]; // 剩余最大生命时间for (int i = 1; i <= G; i++) {st = new StringTokenizer(br.readLine());arr[i][0] = Integer.parseInt(st.nextToken()); // 垃圾被投进的时间arr[i][1] = Integer.parseInt(st.nextToken()); // 维持生命的时间arr[i][2] = Integer.parseInt(st.nextToken()); // 垫高的高度}Arrays.sort(arr, 1, G + 1, new Comparator<int[]>() {@Overridepublic int compare(int[] a, int[] b) {return a[0] - b[0]; // 按时间从小到大排序}});dp[0] = 10; // 初始生命时间为10BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));for (int i = 1; i <= G; i++) {for (int j = D; j >= 0; j--) {if (dp[j] >= arr[i][0]) { // 生命时间足够撑到下一次垃圾投放if (j + arr[i][2] >= D) { // 垃圾高度达到总深度,可以爬出bw.write(arr[i][0] + "");bw.flush();return;}dp[j + arr[i][2]] = Math.max(dp[j + arr[i][2]], dp[j]); // 堆放垃圾,更新新的高度的最大生命时间dp[j] += arr[i][1]; // 吃掉垃圾,增加生命时间}}}bw.write(dp[0] + ""); // 无法爬出,输出存活时间bw.flush();}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~