牛牛切木棒
三角形两边之和大于第三边,因此不构成三角形的条件就是存在两边之和不超过另一边。所以就是贪心的使得尽量多的段能构成的总长度最小,即按照斐波那契数列的方法切割可以使得切割的段数最大,1,1,2,3,5这样可以使得任意三根木棒不能组成三角形,最后无法切割的部分加到最长的一根里面即可。
class Solution { public: /** * * @param a long长整型 木棒的长度 * @return int整型 */ int stick(long long a) { ull ans = 2; ull now = 1, sum = 2; ull x = 1, y = 1; if(a == 1) {puts("1"); return 0;} while(1) { now = x + y; if(now > a - sum ) break; now = x + y; x = y; y = now; ans ++; sum = sum + now; } return ans; // write code here } };