洛谷 P4163 [SCOI2007] 排列
洛谷 P4163 [SCOI2007] 排列
题意
给一个数字串
思路
考虑状压dp。
状态转移方程:
需要注意如果有数字出现了多次,会计算重复。
若一个数出现了
时间复杂度:
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int dp[1 << 11][1005];
int fac[15];
signed main() {
int T; cin >> T;
string S; int d;
fac[0] = 1;
for (int i = 1; i <= 10; i ++) fac[i] = fac[i - 1] * i;
while (T --) {
memset(dp, 0, sizeof(dp));
cin >> S >> d;
dp[0][0] = 1;
for (int i = 0; i < (1 << S.size()); i ++) {
for (int j = 0; j < S.size(); j ++) {
if (i >> j & 1) continue;
for (int k = 0; k < d; k ++) {
dp[i | (1 << j)][(k * 10 + S[j] - '0') % d] += dp[i][k];
}
}
}
int ans = dp[(1 << S.size()) - 1][0];
for (int i = 0; i <= 9; i ++) {
int c = 0;
for (auto x : S) {
if (x == i + '0') c ++;
}
ans /= fac[c]; // 除去重复
}
cout << ans << "\n";
}
return 0;
}
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18384077,orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!