構造遞迴樹來解決問題
從 1~n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。
輸入格式
輸入乙個整數n。
輸出格式
每行輸出一種方案。
同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。
對於沒有選任何數的方案,輸出空行。
本題有自定義校驗器(spj),各行(不同方案)之間的順序任意。
資料範圍
1≤n≤15
輸入樣例:
3輸出樣例:
思想:對於每乙個數都有取和不取兩種策略,這樣可以構造一棵二叉遞迴數,葉子節點即最後的結果
#includeusing namespace std;
int n;
int v[20];
int p[20];
//digui 取數的個數
void digui(int num,int index)
*/ dfs(1);
}
我們用數字「1」表示一盞開著的燈,用數字「0」表示關著的燈。下面這種狀態
10111
01101
10111
10000
11011
在改變了最左上角的燈的狀態後將變成:
01111
11101
10111
10000
11011
再改變它正中間的燈後狀態將變成:
01111
11001
11001
10100
11011
給定一些遊戲的初始狀態,編寫程式判斷遊戲者是否可能在6步以內使所有的燈都變亮。
輸入格式
第一行輸入正整數n,代表資料中共有n個待解決的遊戲初始狀態。
以下若干行資料分為n組,每組資料有5行,每行5個字元。每組資料描述了乙個遊戲的初始狀態。各組資料間用乙個空行分隔。
輸出格式
一共輸出n行資料,每行有乙個小於等於6的整數,它表示對於輸入資料中對應的遊戲狀態最少需要幾步才能使所有燈變亮。
對於某乙個遊戲初始狀態,若6步以內無法使所有燈變亮,則輸出「-1」。
資料範圍
011101
11101
11110
11111
11111
01111
11111
11111
11111
11111
輸出樣例:32
-1解決方法,列舉第一行每個按鈕是否改變。根據第一行按鈕的開關,可以遞推出第二行的狀態,依次類推,到第五行。若此時第五行全為1則說明可以在有限步數內完成全1。然後根據列舉的第一行從而找到最優解。
#include
using namespace std;
int n;
int map[10]
[10];
int mul[10]
[10];
void
init()
}}void
change
(int i,
int j)
bool pan()
}return true;
}int
main()
}for
(int k=
0;k<
31;k++
) temp=temp>>1;
index--;}
for(
int i=
1;i<
5;i++
)//遞推 由第一行狀態就能確定第二行。。。。 }}
if(pan())
}if(minn>6)
else
}}
KM演算法的幾個例題
例題1 給出n個白點和n個黑點的座標,要求用n條不相交得線段把他們連線起來,其中每條線段恰好連線乙個白點和乙個黑點,每個點恰好連線到一條線段 分析 因為結點有黑色和白色,我們不難想到構造乙個二分圖,其中每個白點對應乙個x結點,每個黑點對應y結點,每個黑點與乙個白點相連,權值等於二者的歐幾里得距離。建...
陣列的幾個例題練習
例1 定義乙個長度為10的陣列,迴圈輸入10個整數。然後將輸入乙個整數,查詢此整數,找到 輸出下標,沒找到給出提示。var aa var bb 0,1,2,3,4,5,6,7,8,9 for i 0 i 10 i document.write aa var x prompt 輸入乙個已經輸入的整數 ...
關於遞迴演算法的幾個例子(C語言)
1.遞迴演算法的定義 2.遞迴與迭代的優劣 eg1 斐波那契數列 斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 2...