題目鏈結
問題描述求乙個0~n-1的排列(即每個數只能出現一次),給出限制條件(一張n*n的表,第i行第j列的1或0,表示為j-1這個數不能出現在i-1這個數後面,並保證第i行第i列為0),將這個排列看成乙個自然數,求從小到大排序第k個排列。
#include #include using namespace std;
const int n = 10+5;
int nexts[n][n], t[n];
int n, k, cnt = 0;
int main(int argc, char** ar**)
do }
if(ok) cnt++;
if(cnt == k) break;
}while(next_permutation(t, t+n));
for(int i = 0; i < n; i++)
cout<< t[i]<< " ";
return 0;
}
資料規模和約定
n<=10,k<=500000
輸入格式
第一行為n和k,接下來的n行,每行n個數,0表示不能,1表示能
輸出格式
所求的排列
樣例輸入
3 2
0 1 1
1 0 0
0 1 0
樣例輸出
1 0 2解釋:對於n=3的沒有任何限制的情況
第一:0 1 2
第二:0 2 1
第三:1 0 2
第四:1 2 0
第五:2 0 1
第六:2 1 0
根據題目所給的限制條件由於2不能出現在1後面,0不能出現在2後面
第一:0 2 1
第二:1 0 2
第三:2 1 0
演算法訓練 排列問題
問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約定 n 10,k 500000 輸入格式 第一行為n和k,...
演算法訓練 排列問題
求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。輸入描述 n 10,k 500000 輸入樣例 3 20 1 1 1 0 0 0...
藍橋杯VIP試題 演算法訓練 排列問題
資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約...