藍橋杯VIP試題 演算法訓練 排列問題

2021-10-03 06:29:22 字數 1161 閱讀 8882

資源限制

時間限制:1.0s 記憶體限制:512.0mb

問題描述

求乙個0~n-1的排列(即每個數只能出現一次),給出限制條件(一張n*n的表,第i行第j列的1或0,表示為j-1這個數不能出現在i-1這個數後面,並保證第i行第i列為0),將這個排列看成乙個自然數,求從小到大排序第k個排列。

資料規模和約定

n<=10,k<=500000

輸入格式

第一行為n和k,接下來的n行,每行n個數,0表示不能,1表示能

輸出格式

所求的排列

樣例輸入

3 20 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

思路:這道題最大的難點就是如何排序,按從小到大的順序排列好,再進行選擇就容易了,但是想了很久也沒有很好的方法,於是查了下發現c++是有專門排序的函式的,所以直接可以用來解決這道題。我們先將給定的矩陣進行乙個篩選,選出來限制條件,比如什麼數不能在什麼數的後面,用陣列儲存起來,然後乙個乙個的將排序的數從大到大檢測,符合條件的記錄起來,當所記錄的數與題中的k相等時就程式結束,輸出結果即可。(next_permutation(a,a+n)排序的函式為這個,可以將1-n個數進行排列,當然如果可以用自己設計的演算法解出來這道題的可以分享一下)

**如下:

#include

#include

using

namespace std;

intmain()

}}for(i=

0;i}if

(l1==1)

}if(l1==1)

else

if(sum==m)

break;}

}while

(next_permutation

(a,a+n));

return0;

}

藍橋杯VIP試題 演算法訓練 最大獲利

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 chakra是一位年輕有為的企業家,最近他在進軍餐飲行業。他在各地開拓市場,共買下了n個飯店。在初期的市場調研中,他將一天劃分為m個時間段,並且知道第i個飯店在第j個時間段內,會有aij位服務員當值和bij位客戶光臨。他還分析了不同...

藍橋杯VIP試題 演算法訓練 比賽安排

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值。輸出格式 ...

藍橋杯VIP試題 演算法訓練 乘積最大

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了...