题意:就是一个木头要做成栏杆,所以要进行切割,每一次所需要的费用就等于切割的木头的长度,求最少的费用。
思路: 这一个是霍夫曼编码的题?我最开始真的没看出来,我一直都以为是贪心,最开始想的也挺简单的。就是减,每次减个最大的木头的长度就可以了,然后WA了几次,我还以为是我的优先队列用错的了,然后用快排写,还是wa,最后还是别人和我说了下他的思路,我才发现我理解是错了,每次切割不一定要切割的是所需的长度中最长的,而应该是把木板切成一块一块,然后再从这一块一块中来切,这样的钱才是最少的。
1 #include2 #include 3 #include 4 #include 5 6 using namespace std; 7 int main() 8 { 9 // freopen("in.txt","r",stdin); 10 priority_queue ,greater >s; 11 int n,tmp,tmp1; 12 long long ans = 0; 13 scanf("%d",&n); 14 for(int i=0;i