bzoj:1072: [SCOI2007]排列perm

摘要:
使用namespacestd;字符[11];jc[11];ki<i++)jc[i]=jc[i-1]*i;sizeof(dp));sizeof(t));n=strlen(s);对于(i=0;i<i++)对于(j=0;j<d;j++)如果(dp[i][j]){对于(k=0;n;k)&i))dp[i|(1<

Description

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

Input

  输入第一行是一个整数T,表示测试数据的个数,以下每行一组s和d,中间用空格隔开。s保证只包含数字0, 1
, 2, 3, 4, 5, 6, 7, 8, 9.

Output

  每个数据仅一行,表示能被d整除的排列的个数。

Sample Input

7
000 1
001 1
1234567890 1
123434 2
1234 7
12345 17
12345678 29

Sample Output

1
3
3628800
90
3
6
1398
 
状压dp不解释
记得去重
bzoj:1072: [SCOI2007]排列perm第1张bzoj:1072: [SCOI2007]排列perm第2张
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int n,d,T,mmh;
char s[11];
int dp[1025][1000],t[10],jc[11];
int main(){
    register int i,j,k;
    scanf("%d",&T);
    jc[0]=1;for (i=1;i<=10;i++) jc[i]=jc[i-1]*i;
    while (T--){
        scanf("%s%d",s,&d);
        memset(dp,0,sizeof(dp));memset(t,0,sizeof(t));n=strlen(s);
        for (k=0;k<n;k++) t[s[k]-'0']++;
        dp[0][0]=1;
        for (i=0;i<(1<<n);i++)
        for (j=0;j<d;j++)
        if (dp[i][j]){
            for (k=0;k<n;k++)
            if (!((1<<k)&i)) dp[i|(1<<k)][(j*10+s[k]-'0')%d]+=dp[i][j];
        }
        mmh=dp[(1<<n)-1][0];
        for (k=0;k<10;k++) mmh/=jc[t[k]];
        printf("%d
",mmh);
    }
}
4808 kb 584 ms C++/Edit 706 B
 

免责声明:文章转载自《bzoj:1072: [SCOI2007]排列perm》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jenkins在k8s中的CICD(第二版)Mysql 服务无法启动 服务没有报告任何错误下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

zjfc1076 online judge 对多行字符串输入做处理

题目描述 Ignatius is building an Online Judge, now he has worked out all the problems except the Judge System. The system has to read data from correct output file and user's result...

树状数组求逆序对 附HDU1394

清楚的图解,解释树状数组求逆序对的方法,转载:https://blog.csdn.net/ssimple_y/article/details/53744096 题目:https://vjudge.net/problem/HDU-1394 思路:因为数字[1,n],把a[i]放到末尾,逆序对数量会增加n-a[i]个,即比它大的数字个数, 减少a[i]-1个,...

iOS 动画篇(转)

一、基础知识CAAnimation.png二、CABasicAnimation1. 动画的属性和解释属性解释duration动画的持续时间repeatCount动画持续次数repeatDuration设置动画的时间,在该时间内动画一直执行,不计次数beginTime指定动画开始的时间。从开始延迟几秒的话,设置为CACurrentMediaTime() + 秒...

python2.7.12操作Hbase

前置条件:您已经安装好Hbase、python2.7题外话:最好自己安装个虚拟环境,以下操作都是在虚拟环境中的(ma) hadoop@master:/usr/local/pycharm/bin$ sudo pip install thrift[sudo] password for hadoop: The directory '/home/hadoop/.c...

Java代码常用写法总结

1.字符串是否为空判断 以下是java 判断字符串是否为空的四种方法:方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法:                      if(s == null || s.length() <...

ovn-kubernetes安装指南

Master节点的安装 1、首先在master节点安装ovs和ovn: #!/bin/bash sudo apt-get install openvswitch-common openvswitch-switch sudo apt-get install ovn-common ovn-central ovn-host    源文件参见我的g...