從 1~n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。
輸入格式
輸入乙個整數n。輸出格式
每行輸出一種方案。資料範圍同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。
對於沒有選任何數的方案,輸出空行。
本題有自定義校驗器(spj),各行(不同方案)之間的順序任意。
1≤n≤15輸入樣例: 輸出樣例:
3對於每一步遞迴,可以不選擇當前數n直接進入下一步,也可以選擇當前數n再進入下一步(記得還原現場)22 3
11 3
1 21 2 3
#include
using
namespace std;
const
int n=20;
int res[n]
;//存答案的陣列
int n,r;
void
dfs(
int p)
dfs(p+1)
;//直接進入下一步遞迴
res[
++r]
=p;//選擇當前數再進入下一步遞迴
dfs(p+1)
; r--
;//還原現場
return
;//return不能掉
}int
main()
從 1~n 這 n 個整數中隨機選出 m 個,輸出所有可能的選擇方案。
輸入格式
兩個整數 n,m ,在同一行用空格隔開。輸出格式
按照從小到大的順序輸出所有方案,每行1個。資料範圍首先,同一行內的數公升序排列,相鄰兩個數用乙個空格隔開。
其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面(例如1 3 5 7排在1 3 6 8前面)。
n>0 ,輸入樣例:0≤m≤n ,
n+(n−m)≤25
5 3輸出樣例:
1 2 3給指數型列舉加限制條件就是組合型列舉了1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
#include
#include
using
namespace std;
const
int n=30;
int res[n]
;//存答案的陣列
queue<
int> ans[
100000];
int n,r,m,q;
void
dfs(
int p)
if(p>n)
return
;dfs
(p+1);
//直接進入下一步遞迴
res[
++r]
=p;//選擇當前數再進入下一步遞迴
dfs(p+1)
; r--
;//還原現場
return
;//return不能掉
}int
main()
cout<}return0;
}
把 1~n 這 n 個整數排成一行後隨機打亂順序,輸出所有可能的次序。
輸入格式
乙個整數n。輸出格式
按照從小到大的順序輸出所有方案,每行1個。資料範圍首先,同一行相鄰兩個數用乙個空格隔開。
其次,對於兩個不同的行,對應下標的數一一比較,字典序較小的排在前面。
1≤n≤9輸入樣例: 輸出樣例:
1 2 31 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include
using
namespace std;
const
int n=15;
int n;
int res[n]
,r,visit[n]
;//res[n]是存答案的陣列,visit[n]是標記陣列
void
dfs(
int p)
for(
int i=
1;i<=n;i++)}
return;}
intmain()
遞迴和遞推
遞迴的概念 乙個函式 過程 概念或資料結構,如果在其定義或說明內部直接或間接地出現有其本身的引用,或者是為了描述問題的某一狀態,必須用到它的上一狀態,而描述上一狀態,又必須用到它的上一狀態 這種用自己來定義的方法,稱之為遞迴或者遞迴定義。在程式設計中,過程或函式直接或者間接呼叫自己,就稱為遞迴呼叫 ...
遞推和遞迴
貪心的思想可以用一句話來歸納,每步取優 很好理解,假設你的程式要走i 1 n共n步,那麼保證你的第i步走出的是當前這一步的最優值。這樣的解題方法叫做貪心演算法。可見貪心演算法並不是乙個全面的列舉方法而是若干結果中的一種,僅僅一種而已。但這種演算法是不是最優解它就不能完全保證了。一般每個可以使用遞迴演...
遞推和遞迴
一 遞推演算法基本思想 遞推演算法是一種理性思維模式的代表,其根據已有的資料和關係,逐步推導而得到結果。遞推演算法的執行過程如下 1 根據已有的 結果和關係,求解中間結果 2 判定是否達到要求,如果沒有達到,則繼續根據已知結果和關係求解中間結果 如果滿足要求,則表示尋找到乙個正確的答案。遞推演算法往...