今天看了優先佇列問題,順便水了兩道題,嘿嘿,好久沒寫部落格了,今天晚上回來,宿舍的那台大頭機居然破天荒的能夠連上網頁,總結一下今天的收穫……
下面是我看的關於優先佇列資料:
在優先佇列中,優先順序高的元素先出佇列。
標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。
優先佇列的第一種用法,也是最常用的用法:
priority_queueqi;
通過《操作符可知在整數中元素大的優先順序高。
故示例1中輸出結果為:9 6 5 3 2
第二種方法:
在示例1中,如果我們要把元素從小到大輸出怎麼辦呢?
這時我們可以傳入乙個比較函式,使用functional.h函式物件作為比較函式。
priority_queue, greater>qi2;
其中第二個引數為容器型別。
第二個引數為比較函式。
故示例2中輸出結果為:2 3 5 6 9
第三種方法:
自定義優先順序。
struct node
int priority;
int value;
};
在該結構中,value為值,priority為優先順序。
通過自定義operator《操作符來比較元素中的優先順序。
在示例3中輸出結果為:
優先順序 值
9 58 2
6123
14好吧,下面是我做的題目:
題目:坦克大戰(貌似poj上也有)
**如下:
#include#include#includeusing namespace std;
struct node
;struct cmp //定義優先順序
};int map[301][301],shangxia[4]=,zuoyou[4]=;
int search(int x,int y)
; priority_queue,cmp> q;
q.push(temp);
while(!q.empty())
; q.push(r);
map[i][j]=0;
}} count=q.top().step;
x=q.top().x;
y=q.top().y;
} return -1;
}int main()
}for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
if(map[i][j]==3)
}return 0;
}
#include#include//greater函式標頭檔案
#includeusing namespace std;
int main()
while(q.size()!=1)
q.pop();
printf("%d\n",sum);
} return 0;
}
好吧,知道近些天的積累,我才知道,不以ac為目的的做題,都是扯淡,好吧,以後要多多ac,多多,學習新知識,嘿嘿…… NYOJ 55懶省事的小明
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 小明很想吃果子,正好果園果子熟了。在果園裡,小明已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。小明決定把所有的果子合成一堆。因為小明比較懶,為了省力氣,小明開始想點子了 每一次合併,小明可以把兩堆果子合併到一起,...
NYOJ 55 懶省事的小明
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 小明很想吃果子,正好果園果子熟了。在果園裡,小明已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。小明決定把所有的果子合成一堆。因為小明比較懶,為了省力氣,小明開始想點子了 每一次合併,小明可以把兩堆果子合併到一起,...
nyoj55懶省事的小明
這個題沒啥特別的,思想特別簡單,就是我們學資料結構的時候,那裡面的哈夫曼樹的思想,從一組數裡面選兩個最小的相加,將這兩個數從這組數中刪除,再將這兩個數的和放進去,再從這組數中選兩個最小的數以此類推,優先佇列 堆 的主要作用就是兩個操作 插入,刪除最小,優先佇列插入和刪除元素的複雜度都是o log2n...