题目描述:把长度为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标识符。