以前接觸組合數學的東西比較少,以後要訓練一些這類的題目了。。
利用的是公式是c[i][j] = c[i - 1][j - 1] + c[i][j - 1] 模擬到楊輝三角。這道題目就是給字串標號,給定的字串要求滿足s[i] < s[i + 1] < s[i + 2] ......,如果不滿足則輸出0,然後是給定乙個字串輸出其編號。我們只要求出所有比他小的字串的個數茫然後加上他本身就得到了他的編號。假設字串為s,長度為len
分兩部分求:1:首先求長度為1,2,3,......len -1的所有字串的個數,因為所有的這些字串肯定小於長度為len 的字串;2:再從高位到低位鎖定最高位,求出鎖定最高位後後面所有的個數。
view code
#include #include#include
#define maxn 27
using
namespace
std;
intc[maxn][maxn];
char s[13
];//
求組合數
void
init()
for (i = 2; i <= 26; ++i)
}}//
判斷是否可編碼
bool isok(char *st)
}return
true;}
intmain()
else
//因為對於鎖定s[0]後,它後面一位的取值是從a - s[0]所以要拿出來單獨考慮
for (char ch = '
a'; ch != s[0]; ch++)
for (i = 1; i < len; ++i)
}printf(
"%d\n
",ans + 1
); }
return0;
}
POJ 1850 Code 組合數學)
題意 求str在字典中的編號。字典中的字串都是嚴格公升序排列,而且長度遞增的。a z為1 26,然後是ab az 分別編號為27 51,然後是bc bz。分析 1 首先可以確定長度比str小的總共有多少個。比如長度為2的就有c 26,2 個,相當於26個字元中選2個,由於預設是公升序排列,不會重複,...
組合數學 POJ 1850 Code
poj 1850 比如說求比358小的由1 9的數字組成的數 0不算 而且要求後面乙個數一定比前乙個數大,而且數字不能重複,類似於這個意思,這題是字母,當做數字範圍1 26就行 對於358來說 c 9,2 c 9,1 c 7,2 c 8,2 c 6,2 不想寫了,應該沒算錯 兩位數和一位數,一定比 ...
POJ 1850 code 組合數學
poj 1850 code 將字母和單詞 全部小寫並且按照字典序遞增 按照字典序編號,比如 a 1 b 2 z 26 ab 27 az 51 給你乙個字母或單詞,問你它的編號 以樹狀的結構來分析這道題會比較直觀。按照樹的節點依次編號,每個字母或單詞就落在乙個節點上。要求乙個單詞的編號,比較直接的想法...