https://www.luogu.org/PRoblem/show?pid=2518 對于一個數,把其中的0刪掉,相當于把0放到了前面; 所以這個問題就是讓我們求一下給我們的數的全排列比當前小的有幾個; 我們假設a[i]代表數字i 0~9有幾個; 那么用這些來表示全排列 (a[0]+a[1]+…+a[9])!/a[0]!/a[1]!/…/a[9]!; 當然如果a[i]==0那么不參與運算; 但是這樣的話,longlong表示存不下; 所以我們要用高精度 所以我們在想想; 假如現在有m個位置; 我們先把0放法放好 C(m,a[0]); 之后就只有m-a[0]個位置; 然后在放1 C(m-a[0],a[1]); 所以答案是 C(m,a[0])xC(m-a[0],a[1])x…xC(m-a[0]-a[1]-..-a[8],a[9]); 就可以算全排列; 思路和數位dp差不多; 一位一位向前推進;
新聞熱點
疑難解答