POJ 2965 The Pilots Brothers’ refrigerator BFS+位元運算

題意:冰箱有16個開關,按4*4的矩陣排列。每改變一個開關的狀態,與它同行同列的所有開關也要全部改變狀態。求出開啟冰箱所需要的最少調整次數。題解:DFS應該也可以。#include <queue>#include <iostream>using namespace std;queue<int> que;int step[1<<16];int point[1<<16];int cell[] = { 4383, 8751, 17487, 3

HDU 1394 Minimum Inversion Number 樹狀數組/線段樹

題意:給定一個數組 a1, a2, a3, ------ an, (是一個0-n-1的排列)。可以將它轉換為以下形式。每次將前m個數提取出來放至末尾。a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)...an, a1, a2, ..., an-1 (where m =

POJ 3468 A Simple Problem with Integers 線段樹

題意:給出一串數列,有兩種操作。Q ( x, y ) 表示輸出數列的第 x -- y 個元素的和。 C(x,y,z) 表示將 x - y 的所有元素均加上 z。題解:線段樹很容易。但是聽說這題可以用樹狀數組解,在網上搜了下,暫且把地址記下來。樹狀數組http://kenby.iteye.com/blog/962159#include <iostream>using namespace std;#define L(u) ( u << 1 )#define R(u) ( u

POJ 3667 Hotel 線段樹

題意:  奶牛們最近的旅遊計劃,是到蘇必利爾湖畔,享受那裡的湖光山色,以明媚的陽光。作為整個旅遊的策劃者和負責人,貝茜選擇在湖邊的一家著名的旅館住宿。這個巨大的旅館一共有N (1 <= N <= 50,000)間客房,它們在同一層樓中順次一字排開,在任何一個房間裡,只需要拉開窗帘,就能見到波光粼粼的。湖面。貝茜一行,以及其他慕名而來的旅遊者,都是一批批地來到旅館的服務台,希望能訂到D_i (1 <= D_i <=

POJ 2182 Lost Cows 線段樹

題意: 將N頭進行編號,1 -- n。現在所有的牛隨機站成一條隊列, 我們僅僅知道第 i 個位置的牛前面,有 j 頭牛的編號比它的小。要求每個位置的牛的編號。輸入的第一行是一個整數N, 接著有N-1行輸入,每一行一個整數。假設第5行的數字為3,則表示第5個位置的的牛前面有3頭牛的編號比它小。(因為第一個位置的牛的前面比它編號小的肯定沒有,故第一個位置的輸入被忽略了,所以輸入N之後只輸入了N-1行)。題解:此題和 poj2828 Buy Tickets 有幾分相似。#include

HDU 4007 Dave 線段樹

題意:廣場上有許多的人,現在給你一個邊長為R的正方形,求正方形最多能框住的人,包括邊界。題解:#include <algorithm> #include <iostream> using namespace std; #define N 2010 #define L(u) ( u * 2 ) #define R(u) ( u * 2 + 1 ) #define max(a,b) ( a > b ? a : b ) unsigned int Y[

POJ 1823 Hotel 線段樹

題意:旅館有三種操作:1入住,同時給你兩個數i,M,其中i表示連續房間的起始房號,M表示房間數量;2退房,同時給你兩個數i,M,其中i表示連續房間的起始房號;3查詢,要求輸出整個旅館中,房號相連的最大空房間數量。此題和3667頗為相似。#include<cstdio>#include<algorithm>using namespace std;#define MAXN 20003#define L(u) (u<<1)#define R(u)

POJ 1789 Truck History Prim

題意:給出一組truck的代號(每個代號是長度為7的字串),規定兩個代號之間的distance是不同的字母個數。將每個代號視作點,代號之間distance視作邊權,題意就是要求該圖的最小產生樹題解:#include <iostream>using namespace std;#define INF 0x3fffffffint dis[2001],map[2001][2001];char truck[2001][7];bool check[2001];int n;int prim()

POJ 2104 K-th Number 劃分樹

題意:求區間[l,r]中第k小的數題解:#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;#define MAXN 100001#define L(u) (u<<1)#define R(u) (u<<1|1)#define MID(l, r) ((l+r)>>1)struct

二分圖的一些知識

對於任意圖:|最小邊覆蓋|+|最大匹配|=|V|二分圖的最大匹配=最小點覆蓋數對於二分圖:以下數值等價.最大匹配最小點覆蓋|V|-最大獨立集(二分圖or有向非循環圖)|V|-最小邊覆蓋數|V|-最小路徑覆蓋數(有向非循環圖)|V|-最小路徑覆蓋數/2(無向圖)(上面括弧裡有有向非循環圖的,均是將一個點拆成兩個點連邊匹配)由於任意圖的那幾個幾乎用不到於是這裡只貼二分圖的定義 最小點覆蓋:理解為點覆蓋邊,即用最小的點覆蓋所有的邊。(若一條邊的其中一個端點被選用,這條邊就被覆蓋了) 最大獨立集:求一個

POJ 1724 ROADS (有限制的最短路徑DFS/BFS)

題意:有n座城市,城市之間有道路,道路需要收費,現在Bob想從城市1去城市n,但是他所擁有的錢是有限制的。現在問Bob能否在有限的錢之內到達n城,若能則輸出最短路徑。題解:一開始用vector建圖,果斷TLE··。可能是從尾部添加鄰接點的原因吧。#include <vector>#include <iostream>using namespace std;#define N 10005#define INF 99999struct Edge{int v, len,

POJ 2195 Going Home (二分圖最大權匹配、KM演算法)

題意:給你一張圖,圖上有n個人和n座房子,每個人需要回到一所房子,要求路程之和最小。...H.......H.......H....mmmHmmmm...H.......H.......H....題解:其實題目是求最小帶權匹配,怎麼化成求最大帶權匹配呢?方法一可以將每個值取相反數。方法二用上界減去各個值。基本原理  該演算法是通過給每個頂點一個標號(叫做頂標)來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點Xi的頂標為A[ i ],頂點Yj的頂標為B[ j

POJ 1258 Agri-Net Prim/Kruskal

題意:將n個村莊串連起來,每兩個村莊之間串連的消耗已經知道。求將所有村莊連在一起所需要的最小消耗。題解:給出兩組代碼。Prim:#include<cstdio>#define MAX 300#define INF 99999999int map[MAX][MAX];int dis[MAX], vis[MAX];int Prim ( int n ){ int i, j, k, m, sum = 0; for ( i = 0; i < n; i++ )

POJ 2492 並查集

題意:調查一種蟲子的性行為,先假定蟲子裡沒有同性戀。每一次測試輸入N只蟲,然後輸入M個數對( x, y ),表示 x, y 之間有性行為, 最後判斷假設成立與否(即判斷有沒有同性戀)。#include <iostream>using namespace std;#define N 1000005int opp[N], father[N], rank[N];void make_set ( int x ){for ( int i = 0; i <= x; ++i ){father[

POJ 3253 Fence Repair 哈夫曼樹/優先順序隊列

題意:將一根長為l的木棍鋸成n段,使l1+l2+l3+....= l,  且每次鋸木棍所需花費等於木棍長度。求最小花費。題解:學習優先順序隊列。#include <queue>#include <vector>#include <iostream>using namespace std;struct cmp{bool operator () ( const int &a, const int &b ){return a > b

POJ 2632 Crashing Robots 類比

題意:一個矩形,分成了A*B個大小相同的正方形,把n個機器人放在某些小正方形裡,給他們一些指令,他們會一步一步按指令行動,每次只有一個機器人行動。如果兩個機器人在同一個小正方形裡了他們會相撞;如果出界了,會撞到牆。輸出做一些指令之後機器人的第一次相撞的狀態。#include <iostream>using namespace std;int map[101][101];int a,b;struct rob{int x, y, dre;} robot[101];struct

POJ 2823 Sliding Window 堆 / 單調隊列

題意:給定一串數字,一個定長的視窗,視窗每次平移一個位置,輸出視窗中的最大值。題解:堆與映射 平常,我們用堆,最常見的就是隨機地加入元素,隨機地取最大值或最小值。這些基本的操作C++中的priority_queue和set都能很好的完成,而且C++中還有一個make_heap,效率較前面2個會更高。而且前面提到的STL都是採用紅/黑樹狀結構實現的,很具有穩定性。上面的堆雖然使用簡單,但功能上還是有些局限。比如前面提到的堆都只能實現刪除最值並沒有辦法刪除指定的值。而且一般STL中的堆都是採用資料存

POJ 1753 Flip Game BFS/DFS

 題意:給定一個4*4的棋盤。棋盤上每個格子有黑白兩種狀態。每修改一個格子的狀態,那麼它上下左右的格子也隨之被修改。目標是讓所有格子都變成黑或者所有格子都變成白。問至少需要修改幾次才能實現目標。題解:給出了DFS,BFS兩種解法。DFS:#include <iostream>using namespace std;int MIN; bool cell[16];bool success(){for ( int i = 0; i < 16; i++ )if ( cell[i] !=

hdu 1058 (DP)

#include<stdio.h>int main(){    int n,i,j;// freopen("e://2.txt","r",stdin);int a[4]={0},b[4]={2,3,5,7};int str[6000];for(i=1;i<5842;i++){int

POJ 1573 Robot Motion 類比

題意:給定一個矩陣,裡面有N,S,W,E這4種字母,分別表示向上走,向下走,向左走,向右走4種操作,現給定一個起始點,若能走出矩陣,輸出所需移動次數,若最終迴圈,則輸出迴圈前的移動次數和迴圈一次的次數#include <iostream>using namespace std;struct{int x,y,step;} map[13][13];int main(){char ch;int row, col, start, r, c, cnt;while ( cin >>

總頁數: 61357 1 .... 13177 13178 13179 13180 13181 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.