[bzoj1072] [SCOI2007]排列perm
有一种暴力算法就是直接枚举。
正解就是状压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的更多相关文章
- [BZOJ1072][SCOI2007]排列perm 状压dp
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2488 Solved: 1546[Submit][St ...
- 【枚举】bzoj1072 [SCOI2007]排列perm
暴力,next_permutation函数用于枚举出下一个排列.sscanf函数用于将字符串转化成数字. #include<cstdio> #include<cstring> ...
- [bzoj1072][SCOI2007][排列perm] (状态压缩+数位dp+排列去重)
Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...
- BZOJ 1072: [SCOI2007]排列perm 状态压缩DP
1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...
- SCOI2007排列perm
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 805 Solved: 497[Submit][Stat ...
- BZOJ 1072 [SCOI2007]排列perm
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1268 Solved: 782[Submit][Sta ...
- [BZOJ1072][SCOI2007] 排列prem
Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...
- 1072: [SCOI2007]排列perm - BZOJ
Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种.Input ...
- [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】
题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...
随机推荐
- edghasdz
匹配2016年10月8日19时51分50秒匹配 可以使用
- 数据库模型设计PowerDesigner
Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用Power Designer可以制作数据流程图.概 ...
- js获取网站项目根路径
//js获取项目根路径,如: http://localhost:8083/uimcardprj function getRootPath(){ //获取当前网址,如: http://localhost ...
- jquery返回滚动条顶部
var $view = $('html,body'),$backTop = $('#backTop'), $backTop.on('click',function(){ $view.animate({ ...
- 启动Tomcat报异常host-manager does not exist or is not a readable directory
前几天重新安装了Tomcat6,安装完Tomcat6后在wepapps下面会有一些tomcat自带的项目(root.manager.host- manager等几个),这几天项目没什么用我就删掉了,后 ...
- NSString 初始化方法的内存比较
NSString *str1 = @"hello"; NSString *str2 = @"hello"; NSString *str3 = [NSString ...
- ASP.NET使用Memcached
一.安装Memcached及Memcached配置和状态查询 要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下: memcached.exe下载 保存至相应路径 打开c ...
- 命名函数、eval创建局部变量
1.命名函数 var f = function double(){return x *2;} 该语句将函数绑定到变量f,而不是变量double 匿名的函数表达式: var f = function(x ...
- js无参数对象
<script type="text/javascript"> var o={ a : function(){ for (var i = arguments.lengt ...
- Nagios配置文件详解
首先要看看目前Nagios的主配置路径下有哪些文件.[root@nagios etc]# ll总用量 152-rwxrwxr-x. 1 nagios nagios 1825 9月 24 14:40 ...