狀壓DP之排列perm

2022-01-30 13:55:49 字數 965 閱讀 3539

[scoi2007]排列

給乙個數字串s和正整數d, 統計s有多少種不同的排列能被d整除(可以有前導0)。例如123434有90種排列能被2整除,其中末位為2的有30種,末位為4的有60種。

輸入第一行是乙個整數t,表示測試資料的個數,以下每行一組s和d,中間用空格隔開。s保證只包含數字0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

每個資料僅一行,表示能被d整除的排列的個數。

7

000 1

001 1

1234567890 1

123434 2

1234 7

12345 17

12345678 29

1

33628800903

61398

在前三個例子中,排列分別有1, 3, 3628800種,它們都是1的倍數。

100%的資料滿足:s的長度不超過10, 1<=d<=1000, 1<=t<=15。

#includeusing namespace std;

const int maxn=1<<11,maxm=1000+10;

int f[maxn][maxm];//f[i][j]表示狀態i餘數為j的排序個數

int t,mod;

int a[maxn],cnt[maxn];//cnt記錄某個數i出現的次數

char s[15];

int j=;

int main()

int lim=1

for(int i=0;i}

} int ans=f[lim-1][0];

for(int i=0; i<=9; i++) if( cnt[i] ) ans /= j[cnt[i]];//去重

cout<}}

狀壓DP 暴力搜尋 排列perm

給乙個數字串 s 和正整數 d,統計 sss 有多少種不同的排列能被 d 整除 可以有前導 0 例如 123434 有 90 種排列能被 2 整除,其中末位為 2 的有 30 種,末位為 4 的有 60 種。輸入第一行是乙個整數 ttt,表示測試資料的個數,以下每行一組 s 和 d,中間用空格隔開。...

BZOJ1072 排列perm 狀壓dp

給乙個數字串s和正整數d,統計s有多少種不同的排列能被d整除 可以有前導0 例如123434有90種排列能 被2整除,其中末位為2的有30種,末位為4的有60種。輸入第一行是乙個整數t,表示測試資料的個數,以下每行一組s和d,中間用空格隔開。s保證只包含數字0,1 2,3,4,5,6,7,8,9.每...

排列(STL函式運用 狀壓dp)

題目描述 給乙個數字串s和正整數d 統計s有多少種不同的排列能被d整除 可以有前導0 例如123434有90種排列能被2整除,其中末位為2 的有 30種,末位為4 的有60種。輸入格式 輸入第一行是乙個整數t,表示測試資料的個數,以下每行一組 s和 d,中間用空格隔開。s保證只包含數字0,1,2,3...