這兩天都沒怎麼寫**,因為數學拉的太多了。。。期中考來了。。 今天看了一篇文章,又想起這題,就跑來看看,發現之前居然並沒有寫題解。。。
思路,每個木板的開銷應該是木板的長度乘以節點的深度。那麼就是最短的板應該是深度最大的節點之一,每次將最短的和次短的合併起來就是當前最小的開銷,一直加起來直到所有木板最後合併成乙個木板。
**
#include #include #include #include #include #include using namespace std;
#define m 20009
#define inf 0x3f3f3f3f
typedef long long ll;
int l[m];
int cmp(int a,int b)
int main()
ll ans = 0;
while(q.size()>1)
printf("%lld\n",ans);
}return 0;
}
poj 3253哈夫曼樹
題目的意思是。要把一塊木板切成所需要的n塊,但是每切一刀需要收費。收費的方法是 網上有一些人理解有誤 每當在一塊木板上動刀子,這塊木板的原有長度代表了這刀的費用。思路 切割的過程可以用一棵二叉樹表示,每個節點有兩個或者沒有子節點,節點儲存切割過程中每塊木板的長度。父節點的值 兩個子節點相加 根節點是...
poj3253 優先佇列
解題思路 分析得非常好!利用huffman思想,要使總費用最小,那麼每次只選取最小長度的兩塊木板相加,再把這些 和 累加到總費用中即可 本題雖然利用了huffman思想,但是直接用huffmantree做會超時,可以用優先佇列做 因為樸素的huffmantree思想是 1 先把輸入的所有元素公升序排...
貪心 哈夫曼思想
題意 科學家發現一種奇怪的玩意,他們重量分別是wi,如果他們碰在一起,總重變成2 sqrt w1 w2 要求出最終的重量的最小值。思路 哈夫曼思想,把所有重量放優先佇列裡,這裡每次取倆最大的處理後再放回去,最後佇列剩下的最後元素就是最小的 需要注意的是oj交g 的時候,double型的輸出格式用 f...