原创 PKU 3074

    DLX數獨建圖:一共9*9*9 = 729行,9*9*4 = 324列。第i行表示數獨的i/81行i/9%9列放置數字i%9。324列分成4個部分,每個部分81列,分別限制每個格子只能放一個數字、每行只能放一種數字、每列只能放一種

原创 HDU 3920

    這題時間卡得太緊,狀態DP不是隨隨便便能過。有一個優化,比如說:001111,110011,111100 -> 111111 其實效果都是一樣的,所以每次狀態轉移時確保把第一個'0'變成'1'。現在不變,最終也要變,而且效果是一樣

原创 HDU 4003

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <memory.h> #include <string> #inc

原创 TCHS07 Finals C

    題意:給一棵無向圖構成的樹,要求刪除一些邊,再添加一些邊。使得圖中每個點直接和其它兩個點相連並且保證所有點是連通的。求至少要經過幾次操作才能滿足題意,每次操作爲刪除一條邊或者增加一條邊。     解法:分析可得,要滿足題意,那麼最

原创 HDU 2474

    這題關鍵是數據量太大,如果用普通的銀行家算法,最壞情況下時間複雜度爲O(N*N*M),顯然會超時。正確的解法是對每種資源分別考慮,建立M個隊列。進程對每種資源的需求數量從小到大存入隊列,這樣每次只需檢查隊列頭部的進程即可。排序時間

原创 HDU 3911

線段樹結點結構:     bl,br,ba 分別表示包括左端點黑石子的連續長度,包括右端點黑石子的連續長度,區間中黑石子的最大連續長度     wl,wr,wa 分別表示包括左端點白石子的連續長度,包括右端點白石子的連續長度,區間中白石子

原创 PKU 2987

    最大權閉合圖。題意我不是很理解,如果按英語原句翻譯的話。我覺得輸入的正值是虧損,負值是利潤。這個可以參考例樣,例樣解僱了4、5,獲得了2的利潤。對於第二問如何建圖,可以參考其他博客。這個需要畫到紙上慢慢理解,不好解釋。     對

原创 HDU 2464

    N<=8,顯然枚舉,時間複雜度O(N!*N*N)。 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <st

原创 HDU 3944

    原來劍哥講組合數取模的時候說過Lucas定理,但是不是很明白。總之C(n,k)%p = C(n/p,k/p)*C(n%p,k%p)%p。這裏要注意如果k>n, C(n,k)=0。C(n,k)%p可以通過求逆元的方法計算。不過C(n

原创 HDU 3908

    顯然O(n^3)的算法會超時。正確的解法是首先計算出與每個數互質的數的個數以及與每個數不互質的數的個數,分別記入數組co[]和nco[]。這樣,假設一個三元組包含數字x(x,..,..)。那麼包含x且不符合題意的三元組個數是co[

原创 HDU 3720

    沒什麼好說的,最近太水,各種犯2...#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <string> #

原创 CodeForces 103D

題意:給一個長度爲n的數組,進行p次詢問。每次詢問輸入兩個數a,b,輸出數組中第a位開始,每隔b位的所有數字之和。(1<=n,p<=3*10^5) 解法:剛看清題意,一直在考慮是不是有什麼特殊的數據結構,可以把每次查詢的時間複雜度降到O(