原创 hdu 1814 Peaceful Commission (2-SAT)

給定一個由N個bool值組成的序列A,給出一些限定關係,確定序列中每個元素的值,使其滿足所有限制關係。這個稱爲SAT關係。 特別的,如果每種關係中最多隻對兩個元素進行限制,則稱爲2-SAT問題,即二元可滿足性問題 顯然這個題屬於2-SAT

原创 hdu 1016 Prime Ring Problem

簡單題,直接dfs即可。#include <stdio.h> int n,a[30],f[50],g[30]; void print() {

原创 hdu 1011 Starship Troopers

這個題是用樹形DP的方法做的,所謂樹形DP就是在樹上做的DP,那麼它的狀態轉移就一定和它的兒子結點有關。 這是一個樹形揹包問題,我們用f[i][j]表示以i爲根的子樹在有j個士兵的時候最多能夠獲得的大腦的數量,那麼容易得到狀態轉移方程是:

原创 hdu 1013 Digital Roots

想了想還是把這個題寫上來了,雖然是一個水題吧,但是還是有值得注意的地方 這個題的關鍵點在於你能注意到題意上並沒有給出數據的大小,也就是說,有可能這題的數據相當的長,這一點值得注意。 #include <cstdio> #include

原创 hdu 1025 二分法求LIS

      題目給出兩個序列,兩個序列間有邊相連,我們要選出不交叉的邊,使得所選的邊最多      我們發現,如果我們對其中一個序列從小到大排序的話,這個問題就變成了求另一個序列的最長上升子序列的問題。      由於這個題目的數據比較大

原创 2-SAT問題

給定一個由N個bool值組成的序列A,給出一些限定關係,確定序列中每個元素的值,使其滿足所有限制關係。這個稱爲SAT關係。特別的,如果每種關係中最多

原创 hdu 1023 Train Problem II (卡特蘭數)

卡特蘭數又稱卡塔蘭數,英文名Catalan number,是組合數學中一個常出現在各種計數問題中出現的數列 令h(0)=1,h(1)=1, catalan數滿足遞推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ..

原创 有向圖的強連通分量(SCC)

     在有向圖G 中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通(strongly connected)。      如果有向圖G 的每兩個頂點都強連通,稱G 是一個強連通圖。      非強連通圖有向圖的極大強連通子圖,稱爲強

原创 hdu 1024 Max Sum Plus Plus(最大m子段和)

  這道題很容易看出來是動態規劃   我們用f[i][j]表示前j個數,分成i段,並且使用第j個數所能達到的最大值,那麼我們可以得到狀態轉移:   ①f[i][j]=f[i][j-1]+a[j],前j-1個數分成i段,由於第j-1個數在這

原创 hdu 1009 FatMouse' Trade

根據題意我們可以知道,FatMouse可以只買倉庫裏的一部分,而不用全部買完,那麼顯然,我們利用貪心的思想,找到單位價值最高的倉庫,買這個倉庫內的東西顯然是最划算的,那麼我們根據單位價值從大到小排序,線性的掃一遍就好了。 #include

原创 hdu 1269 迷宮城堡

    根據題意,容易看出,這道題就是要求判斷該圖是否強連通,即只有一個強連通分量,這樣的話,我們直接對圖運用Tarjan算法,求出圖中強連通分量的個數,只有一個強連通分量就說明該圖強連通,否則該圖不強連通。     這道題算是Tarja

原创 hdu 1019 Least Common Multiple

題意要求n個數的lcm,而對於任意的兩個數a,b來說 LCM(a,b)=a*b/gcd(a,b),其中gcd(a,b)是a,b的最大公約數,我們利用這個公式就可以很容易的得出答案 PS:一開始我沒有處理m=1的情況導致程序超時,這是我自己

原创 hdu 1003 Max Sum

簡單DP 最大連續子序列和 (f[i-1]+a[i]>=a[i]):(f[i]=f[i-1]+a[i])?(f[i]=a[i]); 初始化f[0]=0; 在加上一個處理長度的g數組,轉移方程很簡單 (f[i-1]+a[i]>=a[i]):

原创 hdu 1018 Big Number

這道題的題意是要求算出n!的位數,由於n<=10^7,所以這道題直接用高精度的話夠嗆可以做出來。 網上有一個更簡單的方法:   我們假設n!=10^m,那麼容易知道m+1的整數部分就是n!的位數,也就是說,我們只需要求出m的值就可以了,

原创 hdu 1022 Train Problem I

這道題比較簡單,直接建立一個棧,模擬火車的進出過程就好,值得注意的一點是,棧頂的火車可以隨時出棧,而不必等到所有火車都進完。 通過這個問題正好學習一下C++ STL中棧的使用: 使用STL中的棧要加入頭文件 #include <stack