hdu(3308)LCIS

給定N個數,兩種操作U  A B:把第A個數變為B(從0開始計數)Q A B :查詢A到B內,最長的連續上升序列長度向上更新部分要注意細節對於左連續的話,可以由左孩子的左連續得來,但是可能包括右孩子的左連續,要進行判斷左孩子的左連續是否是整個區間,而且中間的結合是否滿足遞增右連續一樣。對於整個區間的最值,可能來源與左右孩子的最值,也可以來源於兩個區間的中間部分。更新部分不需要解釋,直接更新到葉子節點,然後通過子節點更新父節點查詢的時候有點麻煩,需要區間合并的時候需要格外注意左右孩子分別找的結果,

poj(3186)Treats for the Cows

/*題意:給定n個數每次可以從頭或者尾取出資料於是按取出來得順序,就可以排成一個數列,假設這個數列為 

HDU–1213–How Many Tables–並查集

How Many TablesTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9066    Accepted Submission(s): 4429Problem DescriptionToday is Ignatius' birthday. He invites a lot of friends. Now it's dinner

hdu(1532)Drainage Ditches

完全一樣的方法;#include"string.h"#include"stdio.h"#include"queue"#define inf 9999999using namespace std;int r[300][300];int pre[300];int visit[300];int n,m;int bfs(int s,int t){ int p,i; queue<int>q; memset(visit,0,sizeof(visit)); memset(pre,0,sizeof(

hdu(1698)Just a Hook

題意:給出一個數列,初始值都是1,進行一種操作:給出一個區間,將該區間內的數值全部換為2或3或不變,求數列最後的總和。#include<stdio.h>#include<string.h>struct point {    int x,y;    int sum;}a[600000];void tree(int t,int x,int y){    a[t].x=x;    a[t].y=y;    a[t].sum=1;    if(x==y)       

(((hdu3018連通分量的歐拉迴路))

題目意思:         有一個團隊的人要去逛小鎮,這個鎮是無向圖,然後規定每條路只能走一次,且兩個小鎮之間只有一條小路。(就避免了多條路徑的問題。)然後這個圖有可能有連通分量,如果圖有孤立點,那麼這個點就忽略掉,(這個挺有用)。問要分為幾組人馬才能夠把這個城市的小鎮全部逛完。解題思路:(連通分量,粗俗地講就是一個圖的幾個隔離的子圖,每個子圖為一個連通分量)       

poj(1149)PIGS

 //此題的痛點在於,如何建圖。讓r獲得一定的值。。//每個顧客分別用一個節點來表示。 //對於每個豬圈的第一個顧客,從源點向他連一條邊,容量就是該豬圈裡的豬的初始數量。如果從源點到一名顧客有多條邊,則可以把它們合并成一條,容量相加。 //對於每個豬圈,假設有 n 個顧客開啟過它,則對所有整數 i ∈ [1, n),從該豬圈的第 i 個顧客向第 i + 1 個顧客連一條邊,容量為 +∞。 //從各個顧客到匯點各有一條邊,容量是各個顧客能買的數量上限。   這道題目的大意是這樣的:有 M 個豬圈(

hdu((1116))歐拉迴路和通路。。

題目大意:給你n個單詞,要你判斷這些單詞能不能首尾相連。把每個單詞的首尾字母有一條有向邊相連,記錄每個字母的入度和出度把每兩個能連的單詞用一條有向邊邊相連,既是要判斷該有向圖圖是否有歐拉通路,至於歐拉迴路和歐拉通路的判定可以總結為如下:1)所有的點聯通2)歐拉迴路中所有點的入度和出度一樣。3)歐拉通路中終點的入度 - 出度 = 1,起點的 初度 - 入度 = 1, 其他的所有點入度 =

poj(1459)Power Network

解題思路:多源多匯最大流問題目給出很多都是廢話,特別是符號s(u),d(u),Con還有那條公式都別管,混淆視聽痛點在於構圖電站p(u)均為源點,使用者c(u)均為匯點,中轉站當普通點處理第一個誤區是例圖, 結點 和 邊 都有x/y(流量和容量),這個很容易使人產生矛盾(因為學習最大流問題是,只有 邊 才有流量和容量。     但是不難發現,題目所給的例圖中有多個源點,多個匯點,多個普通點,只有源點和匯點才標有 x/y,普通點沒有標x/y,而且所給出的所有邊都有x/y。

hdu(2795)

#include"stdio.h"#include"string.h"struct point {    int x,y;    int sum;}a[200000*3];int h,w,n;int max(int a,int b){    a=a>b?a:b;    return a;}void tree(int t,int x,int y)  {      a[t].x=x;      a[t].y=y;      a[t].sum=w;      if(x==y)         

hdu(1548)A strange lif

還是隊列用著不錯,一下AC了。。。挺簡單的,把所有可能全部遍曆一遍,最後取最優解。。和hdu(2717)Catch That Cow一樣的方法。。 #include"stdio.h"#include"string.h"#include"queue"using namespace std;int visit[210];int p[210];int n,a,b;struct point{ int x,y; int step;};int

歐拉迴路((hdu1878))

無向圖存在歐拉迴路的充要條件一個無向圖存在歐拉迴路,若且唯若該圖所有頂點度數都是偶數且該圖是連通圖。有向圖存在歐拉迴路的充要條件一個有向圖存在歐拉迴路,所有頂點的入度等於出度且該圖是連通圖混合圖存在歐拉迴路條件要判斷一個混合圖G(V,E)(既有有向邊又有無向邊)是歐拉圖,方法如下:假設有一張圖有向圖G',在不論方向的情況下它與G同構。並且G'包含了G的所有有向邊。那麼如果存在一個圖G'使得G'存在歐拉迴路,那麼G就存在歐拉迴路。其思路就將混合圖轉換成有向圖判斷。實現的時候,我們使用網路流的模型。

hdu(4628)Pieces

題意:給定一個串,每次可以刪除一個迴文子串,問把全串刪乾淨的最少次數。思路:用狀態壓縮把所有的狀態枚舉出來,用數組記錄所表示狀態所有字元被刪除乾淨的最少次數如果是迴文串則dp為一,不然則為無窮大;用fun來處理是否為迴文串,然後就用dp即、解決了,。。。#include"stdio.h"#include"string.h"int dp[1<<18];char a[22],s[22];#define min(a,b) a>b?b:aint len;void fun(){ int

poj(1273)(最大流)

#include"string.h"#include"stdio.h"#include"queue"#define inf 9999999using namespace std;int r[300][300];//殘留網路,初始化為原圖int pre[300];//記錄流的上一個結點,即從pre[i]流向iint visit[300];記錄是否訪問int n,m;int bfs(int s,int t)//尋找一條從s到t的增廣路,若找到返回1{ int

UVa 729: The Hamming Distance Problem

這道題只要枚舉出所有情況就可以了。從最左邊一位開始分別討論為0和為1 兩種情況,向右遞迴。我的解題代碼如下:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <string>using namespace std;int s[16];int T,N,H;void f(int

hdu(1018)Big Number(階乘位元的計算)

 這題要求n的階乘的位元,如果n較大時,n的階乘必將是一個很大的數,題中說1<=n<10000000,當n=10000000時可以說n的階乘將是一個非常巨大的數字,對於處理大數的問題,我們一般用字串,這題當n取最大值時,就是一千萬個數字相乘的積,太大了,就算儲存在字串中都有一點困難,而且一千萬個數字相乘是會涉及到大數的乘法,大數的乘法是比較耗時的,就算計算出結果一般也會逾時。這讓我們不得不拋棄這種直接的方法。再想一下,這題是要求n的階乘的位元,而n的階乘是n個數的乘積,那麼要是我們能

最大流入門

最大流模板【EdmondsKarp演算法,簡稱EK演算法,O(m^2n)】  因為是初學教程,所以我會盡量避免繁雜的數學公式和證明。也盡量給出了較為完整的代碼。本文的目標群體是網路流的初學者,尤其是看了各種NB的教程也沒看懂怎麼求最大流的小盆友們。本文的目的是,解釋基本的網路流模型,最基礎的最大流求法,即bfs找增廣路法,也就是EK法,全名是Edmond-Karp,其實我倒是覺得記一下演算法的全名和來曆可以不時的拿出來裝一裝。   

hdu(3549)Flow Problem

#include"stdio.h"#include"string.h"#include"queue"int r[100][100];int pre[1000];int visit[1000];#define inf 999999999using namespace std;int n,m;int bfs(int s,int t)//尋找增廣路。{ int

hdu(4091)Zombie’s Treasure Chest(貪心+背包)

題意:已知s s1 v1 s2 v2; 設有 x 個 s1 和 y 個 s2 ;滿足 x*s1+y*s2<=s 求 max(x*v1+y*v2)給一個背包的容量n,兩種物品的花費a,c和價值b,d,問最多能裝多少價值。 分析:就是n/(a*c/gcd(a,c))-1個a,c的最小公倍數的背包容量肯定是裝相對價值比較大的那個物品,剩下的對花費較大的那個物品進行枚舉,求出剩下的能裝的最大價值 #include"stdio.h"#include"string.h"#define 

UVa 127: “Accordian” Patience

這題只是一道簡單的類比題而已(真的只是簡單而已 =-=   T^T),雖然我花了好長時間。我使用數組類比鏈表,類比對紙牌的操作。要注意的是堆剩餘數為1時,輸出的不是“piles",而是"pile"。我的解題代碼:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include

總頁數: 61357 1 .... 14321 14322 14323 14324 14325 .... 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.