題目的解法屬於貪心,因為cost=a1+a2,所以要保證每次的cost最小,所以說,每次將佇列中最小的兩個相加,得出來的數放入佇列中,再取2個最小的相加,直到全部加完,所以這就涉及了乙個取2個最小數的問題,我說一下我一開始的做法
#include#include#includeusing namespace std;
#define max_size 10000 + 10
int cmp(const void *a,const void *b)
int main()
; int temp=0,sum=0;
int front=0,back=n-1;
if(!n) break;
for(i=0;i
這種演算法是超時的,因為我每次都對佇列進行了一次排序
下面是使用優先佇列的演算法
#include#include#include#include#include#includeusing namespace std;
int main()
{ int i,n;
priority_queue < int,vector,greater>q;
/*優先佇列*/
while(scanf("%d",&n)&&n)
{int temp,sum=0;
/*printf("%d\n",n);*/
for(i=0;i
優先佇列一開始我也不會,之後上網查了一下別人的資料,自己寫出來了
參考資料:
佇列 優先佇列的學習
佇列定義 佇列是限定只能在表尾進行 插入,在表頭進行刪除的線性表 隊尾 允許插入的一端 隊頭 允許刪除的一端 佇列的定義 include queue 標頭檔案 using namespace std 需要加上使用名稱 空間,和sort 排序函式是一樣的。queue int q 格式 queue 型別...
優先佇列(3道優先佇列問題)
優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...
佇列以及優先佇列
1.佇列 佇列的定義 標頭檔案 include 佇列是一種先進先出的資料結構 佇列的宣告 queueq 宣告字元型別 queueq 宣告結構體型別 以及可以宣告一些自定義的型別 佇列的操作 入佇列 s.push x 出佇列 s.pop 返回佇列的資料數量 s.size 判斷佇列是否為空 s.empt...