原创 HDU ACM 1050 貪心

注意:輸入順序可以使凌亂的。 #include<iostream> using namespace std; inline void swap_(int &a,int &b) { int tmp_ = a; a = b;

原创 1058 醜數

如果直接一個個判斷過去, 肯定time out 。 所以弄一個數組存醜數, 空間換時間。 #include<iostream> using namespace std; int a[5843] = {0}; inline int min_

原创 數組指針操作元素

數組指針:int (*a)[10] ;  表示a的跨度是10個整數。  注意與指針數組區別 int *a[10]; 數組指針不能指向一維數組。 加入有一個二維數組table[10][10]; 如果要用a對table的第i行j列元素進行操作

原创 虛函實現原理

對於含有虛函數的類,編譯器會自動爲其生成一個一維的虛函數表vtable,用來存儲虛函數的入口地址。然後在實例化類對象的時候,會自動創建一個指向該類虛函數表的指針vptr。        當一個子類繼承父類(含虛函數)時,會賦值一個相同的虛

原创 HDU ACM 1024(最大子序列和)

2維表table[i][j] 表示將序列a1,a2,a3,...中的包含aj在內的j 個數分成i段,能得到的最大值。 So, table[i][j] = table[i][j-1] + aj  , 表示aj 與aj-1 同屬同一段。  

原创 ZJU PAT 1003 Emergency

最短路徑,DFS 、路徑非負的時候還能用dijkstra算法。 #include<iostream> using namespace std; inline int max_(int &a, int &b) { return a>b?a

原创 char ,unsigned char 還有位移 >>

>> << 對於有符號的用算術運算, 無符號的用邏輯運算。 << 左移算數邏輯都一樣 高位全去掉(符號位也不保留),低位補0. >>右移有點不同,算術的話高位會補符號位,10000001 >> 2   =11100001        

原创 hdu acm 1051 貪心,排序,dilworth定理,最長遞減序列長度

dilworth 定理: 最小鏈劃分數  =  最大反鏈的長度。 於是先按照l 或者 w 排序, 再求最大遞減子序列的長度即可~   要注意,第一次按照 l 排序時(按w 思路也一樣),如果出現l相同的情況, 那麼應該再在l相同的木頭之間

原创 1002. A+B for Polynomials (25)

http://pat.zju.edu.cn/contests/pat-a-practise/1002 題目本身簡單。。不過要注意:輸出的時候 如果合併後係數爲0  , 就不要輸出這項,還有就是係數保留一位小數。 #include<ios

原创 非虛函數的綁定

非虛函數不會佔用子類或者是對象中的內存,它的綁定由編譯器來完成。 如果是該函數和調用它的程序同步編譯,則在compile-time 綁定; 如果該函數是在動態庫裏面的,則在load-time綁定; 如果該函數是在靜態庫裏面的,則在link

原创 虛函數&繼承

新建一個子類時,分兩部分:1,繼承父類  2,修改(改虛函數表、增加新成員變量,若修改了非虛函數,還要爲子類函數綁定新入口地址)。 如下: class A { public: int a,b; void fun1(){...};//假

原创 函數的默認值+帶默認參數的函數

我們可以賦予函數參數默認值。所謂默認值就是在調用時,可以不寫某些參數的值,編譯器會自動把默認值傳遞給調用語句中。默認值可以在聲明或定義中設置;也可在聲明或定義時都設置,都設置時要求默認值是相同的。   關於默認值要注意幾點:   1.

原创 HDU ACM 1081 最大子矩陣問題

子矩陣肯定是1行,2行,……,n行的。 求出行數爲1的最大子矩陣的值,行數爲2的最大子矩陣的值,……,行數爲n時的最大子矩陣的值。  保存在數組sub_max中, 然後sub_max中的最大值就是最大子序列。 #include<iost

原创 HDU ACM 1052

數組T[] K[]分別表示田和king 的馬, 按從塊到慢進行排序。 然後從t=0 k=0 開始, 一直到k >= n爲止結束(t不用遍歷完的, 因爲後面幾匹最慢的是炮灰,和king比較快的馬比了)。 1,如果T[ t ] < K[ k

原创 HDU ACM 1061

水題,注意等於0的情況。 #include<iostream> using namespace std; int main() { int a[10][10] = {0}; int b[10] = {0}; for(int i =