A system comprising: at least one aircraft that navigates based at least in part on a flight path (108, 304, 402, 520); at least one processor (612a, 614a); and at least one memory coupled to the at least one processor (612a, 614a), the at least one memory including a set of instructions, which when executed by the at least one processor (612a, 614a), causes the system to: segment an input flight path (108, 304, 402, 520) into a plurality of segments (108a-108g) based on terrain data; identify target altitude heights of endpoints of the plurality of segments (108a-108g) based on the terrain data and a target cruise altitude; identify a plurality of local maxima associated with the plurality of segments (108a-108g) that are arranged in an order along the input flight path (108, 304, 402, 520); identify a local maximum of the plurality of local maxima that represents a dip in altitude relative to a previous local maximum and a subsequent local maximum; remove the local maximum that represents the dip from the plurality of local maxima to generate a reduced list of local maxima; set, as a plurality of waypoints, the endpoints and the local maxima in the reduced list of local maxima; generate the flight path (108, 304, 402, 520) based at least in part on the plurality of waypoints; and cause the flight path (108, 304, 402, 520) to be provided to the at least one aircraft. at least one aircraft that navigates based at least in part on a flight path (108, 304, 402, 520); at least one processor (612a, 614a); and at least one memory coupled to the at least one processor (612a, 614a), the at least one memory including a set of instructions, which when executed by the at least one processor (612a, 614a), causes the system to: segment an input flight path (108, 304, 402, 520) into a plurality of segments (108a-108g) based on terrain data; identify target altitude heights of endpoints of the plurality of segments (108a-108g) based on the terrain data and a target cruise altitude; identify a plurality of local maxima associated with the plurality of segments (108a-108g) that are arranged in an order along the input flight path (108, 304, 402, 520); identify a local maximum of the plurality of local maxima that represents a dip in altitude relative to a previous local maximum and a subsequent local maximum; remove the local maximum that represents the dip from the plurality of local maxima to generate a reduced list of local maxima; set, as a plurality of waypoints, the endpoints and the local maxima in the reduced list of local maxima; generate the flight path (108, 304, 402, 520) based at least in part on the plurality of waypoints; and cause the flight path (108, 304, 402, 520) to be provided to the at least one aircraft. segment an input flight path (108, 304, 402, 520) into a plurality of segments (108a-108g) based on terrain data; identify target altitude heights of endpoints of the plurality of segments (108a-108g) based on the terrain data and a target cruise altitude; identify a plurality of local maxima associated with the plurality of segments (108a-108g) that are arranged in an order along the input flight path (108, 304, 402, 520); identify a local maximum of the plurality of local maxima that represents a dip in altitude relative to a previous local maximum and a subsequent local maximum; remove the local maximum that represents the dip from the plurality of local maxima to generate a reduced list of local maxima; set, as a plurality of waypoints, the endpoints and the local maxima in the reduced list of local maxima; generate the flight path (108, 304, 402, 520) based at least in part on the plurality of waypoints; and cause the flight path (108, 304, 402, 520) to be provided to the at least one aircraft.