c++学校练习试题,求解决

妈妈的小狗在野外玩耍时不小心掉进了一个大坑里,你帮妈妈想到了一个好办法:往大坑里放狗粮,当狗粮的高度与大坑的深度齐平时,小狗就能逃出大坑了,同时小狗也能通过吃一些狗粮来维持自己的生命。
每袋狗粮都可以用来吃或往大坑里放,并且往大坑里放狗粮不花费你的时间。由于要从全城调集大量狗粮,因而每袋狗粮到达的时间不同。
你预先知道了每带狗粮到达大坑的时间 t(0< t<=1000),以及每袋狗粮可堆放的高度 h(1<=h<=25) 和吃进该袋狗粮后能维持生命的时间 f(1<=f<=30),要求出小狗最早能逃出井外的时间。
目前小狗体内有足够持续10小时的能量,如果小狗10小时内没有进食,小狗就将饿死。
输入
第一行为 2 个整数,D(2<=D<=100) 和 G (1 <= G <= 100),D 为大坑的深度,G 为拟放入大坑的狗粮的袋数。
第二到第 G+1 行每行包括 3 个整数:T (0 < T <= 1000),表示狗粮到达大坑的时间;F (1 <= F <= 30),表示该狗量能维持小狗生命的时间;和 H (1 <= H <= 25),该狗粮能垫高的高度。
输出
如果小狗可以爬出大坑,输出一个整数表示最早什么时候可以爬出;否则输出小狗最长可以存活多长时间。

样例输入 Copy
20 4
5 4 9
9 3 2
12 6 10
13 1 1
样例输出 Copy
13
提示
【样例说明】
第一袋狗粮用于堆放:height=9;
第二袋狗粮吃掉,使小狗的生命从10小时延伸到13小时;
第三袋狗粮用于堆放,height=19;
第四袋狗粮用于堆放,height=20。
怎么做啊,求帮忙

你自己有什么思路?