1月25日shayndel
時間段
記錄
備註
8:00---8:30
8:30---9:00
二進位制狀態壓縮&&hamilton路徑
9:00----9:30
9:30---10:00
10:00—10:30
休息10:30---11:00
成對變換&&lowbit運算
11:00---11:30
11:30---13:30
13:30---14:00
14:00—14:30
lowbit運算&&map
14:30—15:00
高一熱假熱身賽
15:00—15:30
15:30---16:00
看書(遞迴&&遞推)
16:00---16:30
16:30---17:00
17:00---18:30
18:30—21:30
分享交流:
(待書寫)
附:可以貼各種資料或題解
1.24
0x01 位運算
快速冪取模:
要點:1.通過對每個底數取模,降低底數規模。
1 int sum=1;2.把指數轉化為2進製,再通過手段縮小指數的規模,用1的方法進行取模。若指數為偶數,兩兩合併。如7^16%mod=(7%mod)^16=(49%mod)^4=(49%mod)*(49%mod)^2···2 a=a%mod;
3 for(int i=1;i<=b;i++)
4 sum*=a;
5 sum%=mod;
1 #include 2 using namespacestd;64位乘法:3 long long ksm(long long di,long long zhi,long longmod)
12 returnans;
13 }
類似快速冪思想,*變為+即可。
1 long long gcqm(long long a,long long b,long long mod)2.a*b % mod=a*b-[a*b/mod]*p 表示向下取整9 returnans;
10 }
1 long long gcqm2(long long a,long long b,long long mod)1.25二進位制狀態壓縮
hamilton路徑
這道dp的思路是floyd,用二進位制進行狀態壓縮。用乙個n位的二進位制數表示狀態,若第i為為1,則表示第i個點已經被經過。因此我們定義乙個陣列f[i,j]表示」點被經過的狀態」對應的二進位制位為i,且目前處於點j時的最短路徑。
此時dp方程為f[i][j=min(f[i][j],f[i^1<
1 f[1][0]=0;邏輯運算的運算順序成對變換對於非負整數n2 for(int i=1;i<1
3 for(int j=0;j)
4 if(i>>j&1)
5 for(int k=0;k)
6 if((i^1<>k&1)
7 f[i][j]=min(f[i][j],f[i^1
8 cout<
當n為偶數時,n xor 1=n+1
當n為奇數時,n xor 1=n-1
所以0與1,2與3,4與5 關於xor 1 的計算成為成對變換。
lowbit運算
對於非負整數n在二進位制表示下「最低位的1以及後面所以的0構成的數值」。
lowbit(n)=n&(~n+1)=n&(-n)
gcc編譯器內建函式
int_builtin_ctz(unsigned int x)
int_builtin_ctzll(unsigned long long x)
返回x的二進位制表示下最低位的1後邊有多少個0
int_builtin_popcount(unsigned int x)
int_builtin_popcountll(unsigned long long x)
map
寒假集訓 Find Metal Mineral
題目鏈結 題意 給出一顆生成樹,1 n 10000,在某乙個節點有k個機械人 k 10 然後機械人從這裡開始走,要求遍歷完節點,隨便停到什麼地方.求最少的路程總和.題解 樹形dp,關鍵是dp u i i的定義,因為機械人可能從子樹再跑回來,然後為了避免重複討論,應該定義為 在u為根的子樹上停了幾個機...
寒假集訓總結
寒假的訓練以不太順利的結果結束。整個寒假訓練都是兩天一場學長抓的訓練賽,然後補題,由於自己比較菜以及一些莫名的因素,導致訓練賽打得比較差,尤其是後幾場。訓練賽沒能打好的原因可能與狀態關係確實很大,但其中肯定與實力有關吧。總結一下,這些題目,演算法和思維上難倒自己的好像也沒幾道 後來補出來的 但是賽場...
ACM寒假集訓
出自 南昌理工學院acm集訓隊 什麼是dfs?void dfs 狀態 a 1.判斷狀態是否合法。合法繼續執行,否則則回到上次呼叫 2.先下走一層,也就是呼叫dfs a void dfs 引數用來表示狀態 if 越界或者是不合法狀態 return if 特殊狀態 剪枝 return for 擴充套件方...