HDU 1214 圓桌會議

這題糾結了很長時間,主要是題目看不太明白!剛開始一直在想暴利解決。讓程式自動去調換,記錄次數!汗顏!!!言歸正傳。這題就是在求一串數在每次只能對調相鄰兩位時,要得到其逆序最少要移動多少次。在直線上移動很簡單,類似於冒泡排序的方法,一個數不斷向上冒,直到最終位置。不難得到其需要移動的次數公式為n*(n-1)/2。其中n為總點數。那麼在圓環上移動又會如何呢?應該會不一樣這是我們直觀的感受。事實也是如此,移動的過程是將圓環分為兩段,分別移動。那麼又在何處分段呢?答案是盡量使兩段長度相等。為啥?證明如下

HDU 1395 2^x mod n = 1

又是一道數學題分析:1、n==1或者n%2==0,都不會有這樣的2的冪次存在。因為2^k(k=1、2、3...)為偶數,n為偶數時顯然不存在;n==1則容易驗證。2、n為奇數是則一定存在。n為奇數,則至少會存在一個偶數模取n等於1。2^k則會找到所有的偶數。3、2^k%n=(2^a*2^b)%n=((2^a%n)*(2^b%n))%n。(a+b=k) 代碼:#include<iostream>using namespace std;int main(){ int n;

HDU2639 01背包 第K優決策

初學背包。以下內容,來源網路,整理以作學習資料。 求第K優解對於求次優解、第K優解類的問題,如果相應的最優解問題能寫出狀態轉移方程、用動態規劃解決,那麼求次優解往往可以相同的複雜度解決,第K優解則比求最優解的複雜度上多一個係數K。其基本思想是將每個狀態都表示成有序隊列,將狀態轉移方程中的max/min轉化成有序隊列的合并。這裡仍然以01背包為例講解一下。首先看01背包求最優解的狀態轉移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。如果要求第K優解,那

HDU 1124 Factorial

解決該題要注意一下幾個方面:1、任何一個自然數都可分解質因數。N!=1*2*3*4*5*6*...*N=2^a*3^b*5^c*7^d......=(2*5)^c*2^(a-c)*3^b*7^d......=10^c*2^(a-c)*3^b*7^d......2、兩數相乘產生0,只會是2和5相乘。又由於在分解質因數時小的質數的冪次一定不小於大的質數的冪次大,所以a>=c。故解決該題轉化成找出N!中5的冪次。3、如何找出5的冪次呢?舉例說明:N=26,階乘中包含因數5、10、15、20、25

第五篇 直接面向系統資源的0號中斷處理

學習彙編的一個重要目的就是獲得面對底層編程的經驗。這也就是說有的時候我們這些編程者應該繞開作業系統,直接面向硬體要資源。當然,這在某種程度上是不安全的。但請別忘了,我們在寫彙編。 一、簡單介紹下博文的目標這篇博文主要是改寫0號中斷(除法溢出)的入口地址,使之執行編程者自己編寫的中斷處理程式。系統提供的0號中斷服務程式做法是列印divide

HDU3127 完全背包 枚舉所有小矩形

這題可以可以看做完全背包問題來接。因為:1、每種矩形布可以剪任意多個;2、題目給出的矩形布可以看做背包容量;3、每個矩形布都有一個價值關鍵在於找到狀態轉移方程:設dp[i][j]為長為i寬為j的矩形布的最大價值,下面的圖一可以看做待剪的布,圖二為小布的尺寸對於這個問題可以兩種如下剪布方案: 易知剪布後的價值為每個圖形中三塊之和。所以,對於方法一可得dp[i][j]=max(dp[i][j],max((dp[i-x][j]+dp[x][j-y]),(dp[i][j-y]+dp[i-][y]))+v

poj2576 tug of war

二維費用背包,不能使用滾動數組!#include<iostream>#include<cstring>#include<cstdio>#define max(x,y) (x>y?x:y)using namespace std;int f[51][23000],a[101];int main(){int n,i,j,k;scanf("%d",&n);int side=(n+1)/2,sum=0;for(i=1;i<=n;i++){scanf(

第六篇 鍵盤中斷與應用程式讀取鍵盤緩衝區

這篇博文主要介紹在X86下鍵盤的中斷過程,以及應用程式如何利用中斷讀取鍵盤緩衝區內容。 一、撰寫該篇博文的背景介紹在我們全屏看視頻時,按下Esc鍵,播放器還原或者最小化;在利用其他軟體的時候,我們會發現,設定可以設定開啟或關閉程式的捷徑......應用程式為什麼可以根據鍵盤的指示工作?又是如何工作的呢? 二、對於鍵盤中斷的介紹當我們在按下按鍵時,鍵盤會把按鍵的掃描碼發送到主板的介面電路中,具體說就是連接埠60H。當60H收到掃描碼,這時介面就會向CPU發出插斷要求。這是一個可屏蔽中斷。所以,當I

HDU3732 “假的01背包”

這題乍一看來是01背包問題,其實不然。因為直接01背包的話會逾時,O(VN)=O(1000*100000)!!!仔細看題你會發現:每組的0<=v,c<=10,還有就是v,c都是整數。這說明了啥呢?雖然單詞個個不同,但一定有單詞的v,c相同。最多會有100中組合,可以用一個二維數組記錄。rem[v][c]記錄的是價值為v,難度為c的單詞出現的次數。又由於總難度是一定的,所以每類單詞被選的次數是有上限的,所以該題就可以化為多重背包來做了! AC代碼:#include<iostrea

AC自動機的實現原理

       最近學習AC自動機,看了不少講解AC自動機的文章,幾乎都是在講如何操作。估計不少人學習時像我一樣在想AC自動機演算法為什麼能實現多模式串匹配操作。如下是我的思考成果,如有漏洞,歡迎指正。       建立trie樹比較容易,構造fail指標其實是同樣的匹配過程,只要理解query()也就都明白了,下面主要來說說query()是如何完整地尋找出所有的模式串的。     

第七篇 使用8253計數器

本篇博文主要介紹如何利用8253計數器計時。8253計數器每秒大概計數18次。每計數一次就會向CPU發出插斷要求。也即每55ms就會發一次插斷要求。CPU響應中斷,調用的是int 1ch。以下代碼的作用時利用int 1ch中斷計時60秒,在螢幕上顯示00至59,然後程式自動結束。 一、代碼initint equ 1chdata segmentaddr dw ?,?time dw ?count db ?divide db 10data endssseg segment stackdw 512

HDU 2964 Prime Bases

解決這題思路就是從找到的合適的base開始,從大到小逐個計算其係數。為什麼可以這樣設計演算法:1、題目給出n = a0 + a1*p0 + a2*p0*p1 + a3*p0*p1*p2 + ...

第八篇 TSR程式設計初探

這篇博文介紹一個簡單的TSR程式設計的例子。 一、TSR是什麼TSR是記憶體駐留程式(Terminate and Stay Resident Program)的簡稱。記憶體駐留程式是指這樣一種程式,TA在執行結束後,將一部分留在記憶體中,受到作業系統的保護,可由外界啟用。一般來說,TSR都會和DOS或BIOS中斷相聯絡。 二、本篇博文介紹的TSR的設計思路是什麼設計的功能:當運行TSR後,使用者無論輸入什麼,螢幕上只會顯示“A TSR was installed in the          

HDU 2674 N! Again

這題要計算的是N!%2009,0<=N<=10^9。思路:從1開始累乘,直到乘到因子為N為止,並且在相乘過程中,每相乘一次都mod2009,這樣做和把所有1---N因子都乘完後再mod2009結果是一樣的。原因在於每個數都能分為除以2009後的商部分和餘數部分。用這個數乘以n,和用這個數除以2009的商乘以n以及餘數乘以n,效果完全一樣。商乘以n的部分任然是下一個數商部分;而餘數乘以n的部分如果大於2009,則再mod2009,而餘數除以2009的值再加上之前說過的商乘以n則就是這個

HDU1238 最長公用子序列

                      這題是個搜尋題。主要思想就是:首先,找到輸入字串中最短的串;然後,枚舉其子串和子串的反串。這裡求子串要從長度最大到最小,              因為要求的是最大子串。最後,判斷枚舉的子串是否是公用子串。若是,輸出其長度,並結束;反之,繼續求解。                      在做題過程中遇到的問題就是,把bool

第九篇 單步中斷

單步中斷在學習基本的8086指令和程式設計時基本很少被提及,以至於很多人對其都不太瞭解。本博文簡單介紹少單步中斷的執行過程以及用途。 調用單步中斷一般是設定標誌寄存器的內容,使得TF=1,則會在下一條指令執行完成後進入單步中斷服務程式。單步中斷的服務程式與其他中斷服務程式沒有區別。程式員可以設定其中想寫的內容。如果TF=1一直沒有被清零,那麼以後一直會逐步執行程式,也就是說每執行一條指令後就進入單步服務程式,直至程式執行完畢。 這裡也提下,為什麼在進行中斷響應時會使TF=0?看下單步中斷響應過程

第二篇 溢出標誌 CF與OF

在彙編學習中,個人感覺CF與OF這兩個溢出標誌還是有點難理解的。筆者也還是一知半解,若有錯誤之處,請指正! 一、學習CF與OF,要始終牢記一點。CF是無符號數溢出標誌,OF是有符號數溢出標誌。通俗一點說就是,即使有符號數相加/相減導致了CF=1也沒什麼意義,不能說明結果的正確與否。此時,OF=1,則說明結果溢出,出現錯誤;OF=0,說明結果正確。這個過程根本和CF沒關係,CF=1/0,都不會影響。同理也可以得出OF對無符號數也無影響。舉個例子:[9-6]補=[9]補-[6]補=[9]補+[-6]

第三篇 子程式調用與返回的一點小問題

這篇博文主要是為了簡單介紹下,子程式調用的兩種情況,調用在定義前和定義在調用前。一、調用在定義前1、近調用code segmentassume cs:codestart:call fmov ah,4chint 21hf procmov ax,0ffffhretf endpcode endsend start2、遠調用code segmentassume cs:codestart:call far ptr fmov ah,4chint 21hf proc farmov ax,0ffffhretf

第四篇 操作80*25彩色字元顯示緩衝區

這篇博文將要簡單介紹下,如何在螢幕上顯示字元的各種效果。註:博文中的圖片來自王爽《組合語言》,代碼出自博主。一:要求二、對顯示緩衝區的簡單介紹三、對字元屬性位元組的簡單介紹四、一個簡單的例子,有助於理解五、解決該題1、按照題意,只要想緩衝區一個接一個地寫入字元及其屬性就可以在螢幕上顯示了。代碼:data segmentcharacters db 77h,65h,6ch,63h,6fh,6dh,65h,20h,74h,6fh,20h,6dh,61h,73h,6dh,21h

HDU2552 推公式||用公式

首先,看到這道題千萬不要被那個atan(x)的公式嚇倒,根本用不著!兩種思路來做:第一:推導公式,過程如下:1.tan(a+b) = ( tan(a) + tan(b) ) / (1 – tan(a) * tan(b) )2.tan( atan(x) ) = xarctan(1/s) = arctan(1/u)+arctan(1/v)所以得1/s = tan( arctan(1/u)+arctan(1/v) ) = (tan(arctan(1/u)) + tan(arctan(1/v)))/(1

總頁數: 61357 1 .... 17149 17150 17151 17152 17153 .... 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.