洛谷P1246編碼問題 排列組合,分類討論

2022-05-01 15:27:18 字數 896 閱讀 2731

編碼問題

題意就是a,b,c.....ab.....編碼,給你乙個字串,輸出這是第幾個;

這裡可以用暴力列舉,但也可以用組合數學的高超知識;

既然這樣我就說一下排列組合的方法,如果要弄乙個 各位數字遞增的三位數,只需要在乙個有序數列裡面取三個數字,此時就無需關注順序,因為順序只能是公升序的。比如0 1 2 3 4 5 6 7 8 9。取得9 5 8 那麼他的順序就只能是589。總數就是c(x,y),x代表位數,y代表可供選擇的數的長度,

就像例子中是c(3,10)。對於字母排列,道理也是一樣。只需要注意一下y的大小,然後從左到右一步一步推下去就好。

#include #include 

#include

#include

#include

using

namespace

std;

int f[27][100

];int d[7

];string

str;

intmain()

int l =str.length();

for(int i=0; i)

//特判不存在的情況

}

if(l==0)

if(l==1)

//累加長度小於l的可能性;

int sum = 0

;

for(int i=1; i)

//下面是求l位數的前面; 如:bdf 先計數a*的個數 再bc*的個數 再bd

for(int i=0;i1;i++)

}else}}

sum+=d[l-1]-d[l-2]; //

比如bde到bdf有2個,這個需要加上去。

coutreturn0;

}

搜尋和組合數學P1246 編碼

題目鏈結p1246 編碼 如果給出的字串字母不遞增,則輸出 0 否則輸出對應編號。首先資料範圍很小。先簡單算一下,用組合數計算出每乙個長度能編號的字串數目。把 6 個組合數加起來編號就是 313911 即最後乙個字串 mathrm 的編號,完全可以列舉每乙個可以編號的字串,找到匹配的就輸出編號即可,...

P2386 放蘋果(排列組合問題)

目錄dp dfs把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分發 5,1,1和1,1,5是同一種方法 輸入格式 第一行是測試資料的數目t 0 t 20 以下每行均包括二個整數m和n,以空格分開。1 m,n 10 輸出格式 對輸入的每組資料m和n,用一行輸出相應的k。...

洛谷 P1706 全排列問題

題目描述 輸出自然數 11 到 nn 所有不重複的排列,即 nn 的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 乙個整數 nn。輸出格式 由 1 sim n1 n 組成的所有不重複的數字序列,每行乙個序列。每個數字保留 55 個場寬。輸入輸出樣例 輸入 1 複製 3輸出 1 複...