题意:农夫要将板割成n块,长度分别为L1,L2,...Ln。每次切断木板的花费为这块板的长度,问最小花费。21 分为 5 8 8三部分。
思路:思考将n部分进行n-1次两两合成最终合成L长度和题目所求花费一致。贪心,按木板长度排序,每次取长度最小的两块木板,则答案最小。因为合成次数是固定不变的,尽量让小的部分进行多次合成,这样总花费最小。
#include#include using namespace std;typedef long long ll;priority_queue ,greater > que;int main() { int n,x; while(~scanf("%d",&n)) { while(!que.empty()) que.pop(); for(int i=0;i 1) { a=que.top();que.pop(); b=que.top();que.pop(); res+=a+b; que.push(a+b); } printf("%lld\n",res); } return 0; }