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

2022-03-25 05:15:13 字數 1505 閱讀 9067

題目描述

給乙個數字串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

s的長度不超過10,1<=d<=1000,1<=t<=15;

#include using

namespace

std;

const

int maxn=1

<<10

;int d,len,dp[maxn<<1

][maxn],c[maxn],a[maxn];

char s[15

];int

main() }}

}printf(

"%d\n

",dp[maxn][0

]); }

return0;

}

用stl庫中的全排列函式的解法(自帶判重加修改)

next_permutation從遞增數列求出全排列組合(從小到大);

相反函式:prev_permutation(從大到小)

全排列講解:

然後運用函式暴力列舉全排列,計算個數;

#include using

namespace

std;

inline

intread()

const

int maxn = 5200

;char

ch[maxn];

inta[maxn];

signed main()

sort(a + 1, a + 1 +len);

ans = 0

;

dowhile(next_permutation(a + 1, a + 1 +len));

cout

<< ans <

}return0;

}

午歌:apologize

狀壓DP之排列perm

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

狀壓DP 暴力搜尋 排列perm

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

狀壓dp 玉公尺田 狀壓dp

相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...