本文主要是介绍切木材问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:把长度为a的木材切成长度b和c,切一下耗费的力气是b+c,问怎么把指定的a切成b,c,d,e,f...块并且耗费的力气最小。
way:哈夫曼切法,尽可能一半一半的切。(就像是10切成5和5会比切成2和8要省力气一样)
#include<iostream>
#include<vector>
#include<queue>
#include<functional>
using namespace std;int lessForce(vector<int>woods)
{priority_queue<int, vector<int>, greater<int>> que;int n = woods.size();for(int i=0; i<n; i++){que.push(woods[i]);}int sum = 0;while(que.size()>1){sum += que.top(); que.pop();sum += que.top(); que.pop();}return sum;
}int main()
{system("pause");return 0;
}
ps:包含了头文件functional才能认识greater标识符。
这篇关于切木材问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!