NYOJ坦克大戰 懶省事的小明(優先佇列問題)

2021-08-26 18:34:07 字數 1637 閱讀 4112

今天看了優先佇列問題,順便水了兩道題,嘿嘿,好久沒寫部落格了,今天晚上回來,宿舍的那台大頭機居然破天荒的能夠連上網頁,總結一下今天的收穫……

下面是我看的關於優先佇列資料:

在優先佇列中,優先順序高的元素先出佇列。

標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

優先佇列的第一種用法,也是最常用的用法:

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...