lightoj 1021 - Painful Bases 状态压缩
题目链接:http://lightoj.com/volume_showproblem.php?problem=1021
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; const int maxn = <<;
const int INF = 0x3f3f3f3f; long long dp[maxn][];
//dp[i][j]表示数字集合为i(数位i上为1,代表第i个数取了),对K取余为j的数的各个数位上总的排列数。
int num[];
int base,K;
char s[]; int main()
{
// freopen("E:\\acm\\input.txt","r",stdin);
int T;
cin>>T;
for(int cas=;cas<=T;cas++){
scanf("%d %d",&base,&K);
scanf("%s",s);
int len = strlen(s);
for(int i=;i<len;i++){
if(s[i]>='' && s[i] <= '')
num[i] = s[i] - '';
else num[i] = + s[i] - 'A';
}
memset(dp,,sizeof(dp));
dp[][] = ; //表示各位都没有数字,余数为0的个数有一个,即0.
for(int i=;i<(<<len);i++) //枚举不同数字集合
for(int j=;j<K;j++){ //枚举不同数字集合下的余数情况。
if(!dp[i][j]) continue;
for(int k=;k<len;k++){ //i在第k个数位已经有1,直接跳过。
if(i & (<<k)) continue;
dp[i|(<<k)][(j*base+num[k])%K] += dp[i][j];
//j*base+num[k])%K 表示把第k个数加到dp[i][j]中排列数的末尾,新组成的数对K取余后得到余数。
//假设dp[i][j]中的任一个数为num, 则 余数就为(num*base + num[k])% K; 而 num%K == j。 所以利用取模运算就可以化简得到(j*base+num[k])%K
}
}
printf("Case %d: %lld\n",cas,dp[(<<len)-][]);
}
}
//参考别人的代码写的,非原著。
lightoj 1021 - Painful Bases 状态压缩的更多相关文章
- Light OJ 1021 - Painful Bases(状态压缩DP)
题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...
- lightoj 1021 - Painful Bases(数位dp+状压)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1021 题解:简单的数位dp由于总共就只有16个存储一下状态就行了.求各种进制能 ...
- 1021 - Painful Bases
1021 - Painful Bases PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB As ...
- Light oj 1021 - Painful Bases
题意: 给一个B进制的数,一个10进制的数K,B进制数有x位, 对着x位进行全排列的话,有x!种可能, 问这x!的可能中,有多少种可以整除K,各个位置上的数字都不同. 思路:状态压缩,数位DP #i ...
- Painful Bases LightOJ - 1021
Painful Bases LightOJ - 1021 题意:给出0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F中的一些字符(不重复)还有一个进制base,求这些字符的排列形成的ba ...
- lightoj 1011 (状态压缩dp)
思路:状态压缩dp,设dp[i][j] 表示前i行,状态为j时的最大值,状态定义为:若前i行中取了第x列那么j的二进制位中第x位为1,否则为0,最后答案就是dp[n-1][(1 << n) ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...
- loj1011 状态压缩
题目链接:http://lightoj.com/volume_showproblem.php?problem=1011 思路:最近的开始做dp了...很明显的一道状态压缩题,dp[n][state]表 ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
随机推荐
- Oracle 11g 新特性(一)-- 虚拟列
数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如 ...
- MyBatis的学习总结四:实现关联表查询【参考】
一.一对一的表关联查询(edi_test_task 和 edi_task_detail) 例子:一条任务明细对一条任务记录 对应的sql的映射xml文件如下: <?xml version=& ...
- 关于abbr 的一些用法
<span style="margin: 20px;">位 000置:</span><abbr title='四川省绵阳市梓潼县文昌镇金龙乡一大队二组 ...
- php 目录及文件操作
// bool is_dir(string $filename) 判断给定文件名是否是一个目录.// resource opendir(string $path[,resource $context] ...
- 配置Struts2的异常处理
最好的方式是通过声明管理异常处理 1Action里面的execute()方法抛出所有异常:public String execute() throws Exception{} 2声明异常捕捉 ...
- Centos6.5最小化安装:配置网络和自启动服务
参考http://www.111cn.net/sys/CentOS/56456.htm 1.开启网络连接,禁止IPV6启用 1.开启网络连接 vi /etc/sysconfig/network-sc ...
- keil对51单片机变量和函数的编译处理
(1)初始值不是0的全局变量 在程序调到main()函数执行前,除了要进行内存清零.初始化堆栈外,还需要将全局变量的初始值加载到RAM的指定区域(编译过程中为全局变量分配的空间). (2)未初始化的局 ...
- C# mvc 验证码3
//// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长 ...
- nutch 异常集锦
异常:Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp ...
- Node.js V0.12新特性之性能优化
v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化.本文会介绍其中最值得注意的几个. 支持塞住模式的可写流 现在可写流可以 ...