Time of Update: 2017-02-27
開啟電腦,進入Windows作業系統,在資源管理員的左側邊欄中清楚地顯示了系統管理的所有磁碟的資訊以及各個磁碟所容納的檔案與檔案夾(如圖一)。這種常見的顯示方式是由一個根節點和若干個子節點構成的,這被稱為“樹形結構”。這種樹形結構的用途非常廣泛,在很多常用軟體中都出現過它的身影。Windows中將這種結構封裝為“樹形控制項”,即TreeView控制項,它與ListView、Button等一樣都屬於系統內建的通用公用控制項。在Delphi中,Tree
Time of Update: 2017-02-27
如果你想做一個CD播放器的話,那本技巧一定少不了。這是一個控制CD-ROM磁碟機門彈出和關閉的方法,首先需要在uses部分加入mmsystem,接著增加兩個TButton按鈕,在按鈕事件裡寫入下列語句,記住在調用完畢後一定要顯示或判斷returnstring,要不程式將出錯:procedure TForm1.Button1Click(Sender: TObject);var
Time of Update: 2017-02-27
題目大意某校有n個教師和m個求職者,已知每人的工資和能教的課程集合,要求支付最少的工資使得每門課都至少有兩名教師教學。在職教師必須招聘。思路這題不太好想,搞了很久。。f[s1][s2]: s1表示課程集合{ s1 }都至少有一個教師教的情況。s2表示課程集合{ s2 }都至少有兩個教師教的情況。每個求職者的pi, 對於每個求職者,要麼選,要麼不選,就是01背包問題。對於s1,s2,可以根據當前枚舉到的求職者課程即可,可推出下一個狀態:nextS1 = p[i] | s1,nextS2 = (p[
Time of Update: 2017-02-27
題意有n個倉庫,讓m個人來看管。一個倉庫只能由一個人來看管,一個人可以看管多個倉庫。每個人有一個能力值pi,如果他看管k個倉庫,那麼所看管的每個倉庫的安全值為 pi/k(向下取整)如果某個倉庫沒有人看管,那麼它的安全值為0。所有倉庫的安全值L = min{ 每個倉庫的安全值 }如果僱傭一個人的工資等於他的能力值pi。從m個人中選擇一些人僱傭,問所有倉庫的安全值 最高是多少,在安全值最高的情況下,求僱傭的最少價錢。思路f[i][j]表示前i個人,管理j 個倉庫的最大安全值。f[i][j] =
Time of Update: 2017-02-27
題目大意一根長為l的木棍,上面有n個"切點",每個點的位置為c[i]要按照一定順 序把每個點都砍段,最後變成了n+1段每砍一次,就會有一個花費,例如長度為10,“切點”為2,那麼砍完 後會變成兩段2,8, 那麼花費為2+8=10如果有多個“切點”,那麼不同順序切會得到不同的花費。最小 花費是多少?思路注意要增加一個c[n] = lf(i, j) 表示(i,j)區間的最小花費f(i, j) = min{ f(i,k)+f(k+1,
Time of Update: 2017-02-27
題目大意如上圖,這是一個跳舞機,初 始狀態兩個腳都在0, 狀態表示為(0, 0), 然後跳舞機會給你一系列舞步方向,例如 2,3,4,2,3.......每次你必須選擇一隻腳移動到對應數字方向的各格子上。例如從初始狀態 (0,0),要移到1, 可以選擇左腳或者右腳移上去,對應的狀態為(1, 0), (0,1)有一個限制,除了 初始狀態可以是(0, 0),之後的兩隻腳就不能再同時在一個格子上!移動腳要耗費體力, 從0移動 到其它各自都是耗費2,
Time of Update: 2017-02-27
題目大意:有個酒店的門會改變尺寸,變化範圍是【0,k】,這個門每秒鐘尺寸可以變大1,可以 減小1,也可以不變。現在有n個人,他們的尺寸為si,每個人在ti時刻想要進入酒店,只有在ti時刻 酒店門的尺寸恰好和這個人的尺寸大小相等,這個人才可以進入。每個人有一個值Pi,當某人進入酒 店,酒店就會增加Pi值。在[0,T]這段時間內(0秒時酒店的門尺寸狀態是0),求讓一些人進入酒店 ,使得總Pi值最大。思路:開始時,以為同一時間兩個人不能同時進入,結果WA了很久。 其
Time of Update: 2017-02-27
題意一條直線馬路上有n個飯店,各個座標為di.要在n個飯店中選擇k個飯店用來建造停車 場。沒有建停車場的飯店,只能使用附近最近的一個停車場。問總距離最少的建造方案,並輸出。思路先進行預先處理,sum[i][j]表示在飯店i~j之間建一個停車場,i~j的所有飯店到停車場 的距離之和最小。在飯店i~j之間,選擇在(i+j)/2點建造是總距離最小的方案f[i][j],表 示前i個飯店,建造j個停車場的最小總距離那麼,f[i][j] = min{ f[k-1][j] + sum[k][i], 1<
Time of Update: 2017-02-27
題目大意有n種長寬高為x,y,z的磚頭,每種都有無數個。磚頭可以用不同姿勢的方向來蓋 。磚頭a以某種姿勢可以蓋在磚頭b上,若且唯若a的底部的長寬都要比b的底部長寬要小。問 最高可以建多高?思路對於一個x,y,z磚頭,它可以有3中姿勢放置。(前兩個為地面 ,後一個為高)x, y, zx, z, yy, z, x把每種姿勢都記錄下來,變成了有3*n 種固定姿勢的磚頭。然後建圖,g[i][j] = true, 表示磚頭i可以蓋在磚頭j上,反之亦然。然後就是求dag上的最長路了。代碼/**=======
Time of Update: 2017-02-27
本例效果圖(實際效果是相當流暢的, gif 只能說明個動作趨勢):代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls, DXClass, ComCtrls;type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList1:
Time of Update: 2017-02-27
本例效果圖:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls, DXClass;type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList1: TDXImageList; Button1: TButton; Button2:
Time of Update: 2017-02-27
首先來看題目要求:在一個數組中除兩個數字只出現1次外,其它數字都出現了2次, 要求儘快找 出這兩個數字。考慮下這個題目的簡化版——數組中除一個數字只出現1次外,其它數字都成對出現 ,要求儘快找出這個數字。這個題目在之前的《位操作基礎篇之位操作全面總結》中的“位操作趣味應用” 中就已經給出解答了。根據異或運算的特點,直接異或一次就可以找出這個數字。現在數組中有兩個
Time of Update: 2017-02-27
啟動Desktop有兩種方法:(1)從Windows中啟動從Windows作業系統介面中,依次點擊功能表項目“開始l程式l Borland DelPhi6 I Database Desk.Top”,就可啟動DeskTop。(2)從Delphi中啟動從Delphi主菜單中單擊“Tools I Database
Time of Update: 2017-02-27
首先來看看原題微軟2010年筆試題在一個排列中,如果一對數的前後位置與大小順序相反 ,即前面的數大於後面的數,那麼它們就稱為一個逆序數對。一個排列中逆序的總數就稱為這個排列的逆序 數。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序數對,因此整個數組的逆序數對個數為4,現在給定 一數組,要求統計出該數組的逆序數對個數。計算數列的逆序數對個數最簡單的方便就最從前向後依 次統計每個數字與它後面的數字是否能組成逆序數對。代碼如下:#include <stdio.h> int
Time of Update: 2017-02-27
Delphi與DirectX 之DelphiX(7): 給TDXImageList載入圖片的最後方案本例效果圖:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls;type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList1:
Time of Update: 2017-02-27
快速排序由於排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經常被採用,再加上快速排序 思想----分治法也確實實用,因此很多軟體公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個 ,還有大大小的程式方面的考試如軟考,考研中也常常出現快速排序的身影。總的說來,要直接默寫 出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有協助 ,達到快速排序,快速搞定。快速排序是C.R.A.Hoare於1962年提出的一種劃分交換排序。它採用了
Time of Update: 2017-02-27
直接選擇排序和直接插入排序類似,都將資料分為有序區和無序區,所不同的是直接播放排序是將無序區 的第一個元素直接插入到有序區以形成一個更大的有序區,而直接選擇排序是從無序區選一個最小的元素直 接放到有序區的最後。設數組為a[0…n-1]。1. 初始時,數組全為無序區為a[0..n-1]。令 i=02. 在無序區a[i…n-1]中選取一個最小的元素,將其與a[i]交換。交換之後a[0…i]就形成了一個 有序區。3.
Time of Update: 2017-02-27
題意給一棵邊有權值的二叉樹,節點編號為1~n,1是根節點。求砍掉一些邊,只保留q條邊,這q條邊 構成的子樹的根節點要求是1,問這顆子樹的最大權值是多少?思路非常經典的一道樹形dp題 ,根據我目前做過的題來看,有多道都是由這題衍生出來的。f(i, j) 表示子樹i,保留j個節點(注意是 節點)的最大權值。每條邊的權值,把它看作是串連的兩個節點中的兒子節點的權值。那麼,就可以對所 有i的子樹做分組背包,即每個子樹可以選擇1,2,...j-1條邊分配給它。狀態轉移為:f(i, j) = max{
Time of Update: 2017-02-27
題目給n個節點的帶權樹,刪掉其中一邊,就會變成兩顆子樹,求刪去某條邊使得這這兩顆子樹的 權值之差的絕對值最小。思路直接dfs一次,計算所有子樹的權值總和tot[i]如果刪掉一條邊 (v, fa),fa是v的父親節點,那麼v子樹權值總和為tot[v],顯然另一棵子樹的權值總和就是sum-tot[v] ,最總取最小絕對值即可。這題要注意用long long其實就是dfs+枚舉,想不通為什麼有人會 把這題列為樹形dp?代碼/**=====================================
Time of Update: 2017-02-27
function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; {啟動選項} var lpThreadId: DWORD): THandle; stdcall;CreateThread 的倒數第二個參數 dwCreationFlags(啟動選項)