有一种暴力算法就是直接枚举。

正解就是状压dp

令f[i][j]:i:使用的数位的状态j:当前的模数

边界:f[0][0] = 1;

f[i|1<<k][j*10+k % n] += f[i][j] | !(i&(1<<k))

答案就是f[i<<len-1][0]

进行了一些重复处理。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 15;
int main() {
// freopen("input", "r", stdin);
int T;
scanf("%d", &T);
while (T--) {
int f[1024 + 5][1000 + 10];
char s[maxn];
int n;
long long Ans;
scanf("%s %d", s, &n);
int a[maxn], Cnt[maxn];
int len = strlen(s);
f[0][0] = 1;
for (int i = 0; i < len; i++) {
a[i] = s[i] - '0';
++Cnt[a[i]];
}
for (int i = 0; i < 1 << len; i++) {
for (int j = 0; j < len; j++) {
for (int k = 0; k < len; k++) {
if (!(i & 1 << k)) {
f[i | (1 << k)][(j * 10 + k) % n] += f[i][j];
}
}
}
}
Ans = f[(1 << len) - 1][0];
for (int i = 0; i <= 9; i++) {
for (int j = 1; j <= Cnt[i]; j++) {
Ans /= j;
}
}
printf("%lld\n", Ans);
/* char s[maxn];
int n;
scanf("%s %d", s, &n);
int a[maxn];
int len = strlen(s);
for (int i = 0; i < len; i++)
a[i] = s[i] - '0';
sort(a, a + len);
set<long long> st;
st.clear();
int ans = 0;
while (1) {
long long num = 0;
for (int j = 0; j < len; j++)
num = num * 10 + a[j];
if (st.count(num))
continue;
else if (!(num % n)) {
st.insert(num);
ans++;
}
if (!next_permutation(a, a + len))
break;
}
printf("%d\n", ans);*/
}
return 0;
}

[bzoj1072] [SCOI2007]排列perm的更多相关文章

  1. [BZOJ1072][SCOI2007]排列perm 状压dp

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2488  Solved: 1546[Submit][St ...

  2. 【枚举】bzoj1072 [SCOI2007]排列perm

    暴力,next_permutation函数用于枚举出下一个排列.sscanf函数用于将字符串转化成数字. #include<cstdio> #include<cstring> ...

  3. [bzoj1072][SCOI2007][排列perm] (状态压缩+数位dp+排列去重)

    Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...

  4. BZOJ 1072: [SCOI2007]排列perm 状态压缩DP

    1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...

  5. SCOI2007排列perm

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 805  Solved: 497[Submit][Stat ...

  6. BZOJ 1072 [SCOI2007]排列perm

    1072: [SCOI2007]排列perm Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1268  Solved: 782[Submit][Sta ...

  7. [BZOJ1072][SCOI2007] 排列prem

    Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...

  8. 1072: [SCOI2007]排列perm - BZOJ

    Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种.Input ...

  9. [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】

    题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...

随机推荐

  1. TraceView进行性能分析

    一.TraceView概述 TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method. 详细内容参考 ...

  2. destoon公司搜索页面显示公司类型

    首先找到前台模板文件:/template/default/company/search.htm 看到51行 {template 'list-company', 'tag'} 打开 /template/ ...

  3. WebService -- Java 实现之 CXF (WebService 服务器端接口)

    1. 使用Maven创建一个quickstart项目 2. 引入依赖的Jar包 <dependency> <groupId>org.apache.cxf</groupId ...

  4. vim python配置 安装pep8自动检查插件,语法高亮

    pep8 http://www.vim.org/scripts/script.php?script_id=2914 语法高亮 http://www.vim.org/scripts/script.php ...

  5. 使用SQL语句对数据进行MD5加密

    如果数据库表User中有一列为passwd,存放的是md5加密的数据,如何更新新的数据. update user set passwd=md5("123321") where uN ...

  6. JdbcTemplate中queryForObject的EmptyResultDataAccessException问题

    在使用Spring提供的JdbcTemplate中名为queryForObject API进行数据库查询时有时会抛出如下异常提示息,org.springframework.dao.EmptyResul ...

  7. 一个漂亮的上传按钮input[type=file]

    ;;} <div class="input-group xj-file xj-panel-top"> <span class="input-group- ...

  8. Ruby基本类型

    #!/usr/bin/ruby =begin Ruby支持的有5种类型的变量 全局变量:以$开头 未初始化的全局变量的值为0 并使用-w选项产生警告 全局变量的赋值会改变全局状态 不推荐使用全局变量  ...

  9. CUDA代码移植

    如果CUDA的代码移植,一个是要 include文件夹对不对,这个是.h文件能否找到的关键,另一个就是lib,这个是.lib文件能否找到的关键.具体检查地方,见下头. include: lib:

  10. Windows下安装Redis

    1.首先,Redis官方是支持Linux系统的,我这里不多说,需要的可以参考:http://www.oschina.net/question/12_18065/ 2.Windows 64位下载地址:h ...