1 | #!/usr/bin/env python |
USACO JAN10 Gold
hayturn
動態規劃, \(F_m\)表示當前要做選擇的奶牛在可以選擇\(w_{m\ldots n-1}\)時可以獲得的最大值。 \(S_m\)表示當前要做選擇的奶牛做完\(w_{m\ldots n-1}\)的最優決策後,下一個奶牛可以取得的最大值。
1 |
|
island
根據USACL Analysis(後附),根據一個格子周圍格子的佈局,先把一些點轉換爲A,然後繞着A走一圈。
1 |
|
telephone
先把題目中給出的樹有根化,對於一個頂點u,如果它有不超過K/2個孩子還未被分配, 可以把它們中最多2*K個在u處連接起來。如果有孤立孩子並且還未配對完K對孩子, 那麼只能和u子樹外的頂點配對,這相當於u是其parent的未分配頂點。
1 |
|
1 | USACO JAN10 Problem 'island' Analysis |
PyGTK迷宮生成器mazer
隨機生成一個迷宮 
1 | #!/usr/bin/env python |
2013年8月17日更新
現在知道這個算法的名稱了:recursive backtracking,可以參見拙作完美迷宮生成算法
三柱漢諾塔相關擴展問題
設盤子編號爲
輸出初始局面(所有盤子都在1號柱子)到終止局面(所有盤子都在3號柱子)的最優方案。
時間複雜度:
輸出最優方案中某一局面之前經過的步驟數。 時間複雜度:
1 |
|
輸出當前局面(不一定是最優解的中間步驟)到終止局面的最優方案。
時間複雜度:
1 |
|
輸出當前局面下,把所有盤子移動到任一根柱子的最優方案。 時間複雜度:Ο(2^N)
1 |
|
輸出當前局面下,把所有盤子移動到任一根柱子的最優方案所需步數。
時間複雜度:
易知,必定把
注意到如果
之所以要移動
1 | #include <stdio.h> |
總結一下,對於求方案的問題,因爲最壞情況下步驟數可以達到
對於求步驟數(無須輸出方案),以上源碼時間複雜度都是
GTK+黑白棋reversi
language: C99 + GTK+ algorithm:對棋盤各個格子設置權值,計算總值 icon:程序截圖 license: GNU General Public License v3 revision control: Mercurial bead-black.png bead-white.png texture1.png texture2.png: 8pm(http://hi.baidu.com/eightpm) 提供
gdk透明貼圖好像有點麻煩(以前 Win32 API 用得是 TransparentBlt)

菜單採用GtkUIManager,可以看demo:/usr/share/gtk-2.0/demo/ui_manager.c的透明貼圖:
1 | void pixbuf_transparent(GdkPixbuf *dst, const GdkPixbuf *src, gint dstx, gint dsty, guint transcolor) |
GTK+ tic-tac-toe(井字棋)
語言:C99 圖標是隨手塗鴉的 界面部分抄襲 http://sourceforge.net/projects/tictactoegtk/(作者:Obada Denis(obadadenis@gmail.com),javajox(javajox@users.sourceforge.net)) 算法是 min-max search 版本控制系統採用 8pm 推薦的 Mercurial 項目首頁:http://code.google.com/p/rayup/ #裏面還有些其他亂七八糟的東西 Download:hg clone https://rayup.googlecode.com/hg/ rayup 沒有安裝 Mercurial 的話,可以訪問 http://code.google.com/p/rayup/source/browse/,手動下載一個個文件……

稱球問題擴展——根據當前已知信息選擇最優稱量方案
似乎是某個TopCoder SRM的題目。
N 個球,有一個是壞的,壞球重量與好球不同(略輕/重於好球)。有一個天平,可以告知左右兩邊孰重孰輕,最小化最壞情況下稱量次數,給出稱量方案。下面討論該問題的一個擴展——如何通過已知信息(即之前稱量結果,之前的稱量結果可能不是最優的)選擇下一步稱量方案,最小化最壞情況下的稱量次數。
根據已有信息把所有球分爲4類: - 肯定是好球 - 不可能比好球輕(不能確定是否爲壞球) - 不可能比好球重(不能確定是否爲壞球) - 不知道任何信息
每個球必定屬於以上四類中的某一類。我們只需知道每一類的數目即可,具體編號無關緊要。令\(s[nh][nl][nu]\)表示有\(nh\)個1類球,nl 個2類球,nu 個3類球,最壞情況下需要稱量的次數。枚舉一邊放置的各類型球數 lh(1類),ll(2類),lu(3類),枚舉另一邊放置的各類型球數 rh(1類),rl(2類),ru(3類),re(0類)。如果兩邊都有0類球,那麼我們可以在兩邊各移去一個。我們可以保證0類球只出現在一邊,不妨設爲 rh(1類),rl(2類),ru(3類) 一邊。
NOIP 2004 數字遊戲(蟲食算)
下面程序可計算如下形式的式子:
1 | one |
方法是枚舉進位+解方程,涉及的字母以及各個位上的進位作爲變量,然後解方程。這樣可以用 各個位上的進位 和 字母變量中的自由變量 表示 其他字母變量。枚舉 各個位上的進位 和 字母變量中的自由變量 以求出 其他字母變量,以此得到各組解。使用方法:根據要求解的式子設置各個變量,N、M設置得大點沒關係,L要正好等於式子的行數,然後輸入L行字符串
Dancing Links+Algorithm X求解數獨
1 |
|
2013年8月17日更新
NOIP 2009考了靶形數獨,可能前一天我還敲了一遍這段代碼……
.emacs
.emacs 很多 elisp 文件是通過 gentoo portage 安裝的,部分不在 portage 裏的放在了 ~/.emacs.d 下面
1 | (progn (cd "~/.emacs.d") (normal-top-level-add-subdirs-to-load-path)) |
2013年8月17日更新
記得這是NOIP 2009前的停課時期,我做題無聊了就折騰Linux下的各種工具,此興悠哉!來機房也不都是來做題的,來“操機”的不少,我覺得隱隱有危機,果不其然後來機房就只在一週的少數幾天開放了。