题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1021

题解:简单的数位dp由于总共就只有16个存储一下状态就行了。求各种进制能否整除k模仿10进制就行。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll dp[1 << 17][21] , po[20][20];
int base , k , num[20];
char s[20];
ll dfs(int len , int stat , int mod , int Max) {
if(len == 0) {
if(mod % k == 0) return 1;
return 0;
}
if(dp[stat][mod] != -1) return dp[stat][mod];
ll sum = 0;
for(int i = 0 ; i < Max ; i++) {
if((1 << i) & stat) continue;
else {
sum += dfs(len - 1 , stat | (1 << i) , (num[i] + mod * base) % k, Max);
}
}
dp[stat][mod] = sum;
return sum;
}
int main() {
int t;
scanf("%d" , &t);
int ans = 0;
for(int i = 2 ; i <= 16 ; i++) {
po[i][0] = 1;
for(int j = 1 ; j <= 16 ; j++) {
po[i][j] = po[i][j - 1] * i;
}
}
while(t--) {
scanf("%d%d" , &base , &k);
scanf("%s" , s);
int len = strlen(s);
for(int i = 0 ; i < len ; i++) {
if(s[i] == 'A') num[i] = 10;
else if(s[i] == 'B') num[i] = 11;
else if(s[i] == 'C') num[i] = 12;
else if(s[i] == 'D') num[i] = 13;
else if(s[i] == 'E') num[i] = 14;
else if(s[i] == 'F') num[i] = 15;
else num[i] = s[i] - '0';
}
for(int i = 0 ; i < (1 << len) ; i++) {
for(int j = 0 ; j <= k ; j++) dp[i][j] = -1;
}
printf("Case %d: %lld\n" , ++ans , dfs(len , 0 , 0 , len));
}
return 0;
}

lightoj 1021 - Painful Bases(数位dp+状压)的更多相关文章

  1. 【HDU】4352 XHXJ's LIS(数位dp+状压)

    题目 传送门:QWQ 分析 数位dp 状压一下现在的$ O(nlogn) $的$ LIS $的二分数组 数据小,所以更新时直接暴力不用二分了. 代码 #include <bits/stdc++. ...

  2. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  3. hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)

    传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...

  4. HDU.4352.XHXJ's LIS(数位DP 状压 LIS)

    题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...

  5. SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)

    Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...

  6. 【数位dp+状压】XHXJ 's LIS

    题目 define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the enti ...

  7. CodeForces1073E 数位dp+状压dp

    http://codeforces.com/problemset/problem/1073/E 题意 给定K,L,R,求L~R之间最多不包含超过K个数码的数的和. 显然这是一道数位dp,在做的过程中会 ...

  8. lightoj 1021 - Painful Bases 状态压缩

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1021 #include<cstring> #include<cstd ...

  9. hdu 4352 XHXJ's LIS(数位dp+状压)

    Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefull ...

随机推荐

  1. Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种.Hard Link 文件又被称为硬链接文件.实体链接文件,Symbolic Link 文件则常被称为符号链接.软链接 ...

  2. Ubuntu 系统如何用pycharm开发python—OpenCV

  3. oracle的开窗函数

    原创 select * from (select province, commodity, sum(price), ROW_NUMBER() OVER(PARTITION BY province  o ...

  4. html+css+dom补充

    补充1:页面布局 一般像京东主页左侧右侧都留有空白,用margin:0 auto居中,一般.w. <!DOCTYPE html> <html lang="en"& ...

  5. 使用 Docker 生成 Let’s Encrypt 证书

    概念 什么是 Container ? https://www.docker.com/resources/what-container https://www.docker.com/why-docker ...

  6. 高性能MySQL之基础架构

    一.背景 为什么我们需要先学习MYSQL的基础架构先呢? 原因很简单,当我们需要了解一件事物的时候,我们只有站在宏观的层面,才能层层剥丝抽茧的去理解问题.举个例子,我们要看一个框架的源码,一开始就想进 ...

  7. MYSQL 入门配置

    1.下载 MYSQL官网 2.目录结构图基本如下 3.运行CMD(管理员权限),进入MYSQL目录下面的bin目录 4.执行 mysqld install 5.执行 net start mysql 6 ...

  8. 3.php基础(控制语句,函数,数组遍历)

    if条件判断语句 结构一:只判断true,不管false 结构二:既判断true,也判断false(二选一) 结构三:多条件判断 switch多分支结构 Switch语法结构说明: l Switch的 ...

  9. LCA最近公共祖先---倍增法笔记

    先暂时把模板写出来,A几道题再来补充 此模板也是洛谷上的一道模板题 P3379 [模板]最近公共祖先(LCA) #pragma GCC optimize(2) //o2优化 #include < ...

  10. Python 面向導向語言 Object Oriented Programming Language

    Pytho 是面向對象的程式語言,舉凡 Literals 值都是 Object.例如: >>> id(38)8791423739696 與 >>> id('ABC' ...