还是那句话s<=10 必然想到状压

题目唯一的难点在于怎么转移整除

整除即是mod d=0,我们用f[cur,j]表示选取状况为cur,余数为j的方案数

注意一个数a1a2a3…an (ai表示第i位的数字)

这个数可以这样表示[(a1*10+a2)*10+a3]*10……

根据mod的运算律,所以转移就很明显了吧

注意这里算出的方案数没有考虑几个数字重复的情况

所以还要用可重复排列的技术方法除一下

 var f:array[..,..] of longint;
    s,a,d:array[..] of longint;
    ans,p,x,i,j,k,m,n,t,tot:longint;
    ch:char; begin
  readln(tot);
  d[]:=;
  for i:= to do
    d[i]:=d[i-]*i;
  while tot> do
  begin
    dec(tot);
    fillchar(s,sizeof(s),);
    t:=;
    read(ch);
    while ch<>' ' do
    begin
      x:=ord(ch)-;
      inc(t);
      a[t]:=x;
      inc(s[x]);
      read(ch);
    end;
    readln(p);
    fillchar(f,sizeof(f),);
    m:= shl t-;
    f[,]:=;
    for i:= to m do
      for j:= to p- do
        for k:= to t- do
        begin
          x:= shl k;
          if i and x= then
            inc(f[i or x,(j*+a[k+]) mod p],f[i,j]);
        end;     ans:=f[m,];
    for i:= to do
      ans:=ans div d[s[i]];
    writeln(ans);
  end;
end.

bzoj1072的更多相关文章

  1. 【BZOJ1072】排列(搜索)

    [BZOJ1072]排列(搜索) 题面 BZOJ 洛谷 题解 算下复杂度,如果用\(next\_permutation\) 那就是\(10!\times 10\times 15\),复杂度不太对 那好 ...

  2. [bzoj1072] [SCOI2007]排列perm

    有一种暴力算法就是直接枚举. 正解就是状压dp 令f[i][j]:i:使用的数位的状态j:当前的模数 边界:f[0][0] = 1; f[i|1<<k][j*10+k % n] += f[ ...

  3. [BZOJ1072][SCOI2007] 排列prem

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

  4. bzoj1072排列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1072 好像是这方面的裸题. 整除k 要想转移需要记录下 达到模k所有余数 的方案数. 为了生 ...

  5. BZOJ1072 排列perm 【状压dp】

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

  6. 【BZOJ1072】【SCOI2007】排列 [状压DP]

    排列 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给一个数字串s和正整数d, 统计s有多 ...

  7. 【bzoj1072】SCOI2007排列

    状压dp,f[i][j]表示当前取了i,模数余j的状态. 然后向后推,枚举可能的数即可. 注意每个数存在重复,最后要除以相应出现次数的阶乘. #include<bits/stdc++.h> ...

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

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

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

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

随机推荐

  1. 10个你可能不知道的JavaScript小技巧

    1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...

  2. poi 导入/导出 工具类

    package com.holy.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcept ...

  3. Runtime 在IOS中的详细使用

    因为之前写东西的时候,都在未知笔记中,所有大家没有看到过我的文章,今天就开始使用博客园来进行和大家沟通.好了,废话不那么多了,转入正题.下面我把runtime 给大家介绍一下. ### 一.runti ...

  4. Hibernate不同DB的日期查询

    Java web项目开发,ORM层用的是Hibernate,用HQL语句查询不同数据库时,日期时间比较还是有所区别的. 1.在Mysql数据库时,是这样写的: 上面是个代码拼串截图,翻译一下是这样的: ...

  5. hibernate细节一

    public void saveUser(){        Session session=JdbcUtil.getSession();        User user=new User();   ...

  6. 初学JqueryMobile(一)

    一.初学2个data标签 标签名称 标签属性 属性说明 备注 data-role page 容器或试图 表示容器的作用 header 标题 content 内容 footer 页脚 data-tran ...

  7. jQuery设置checkbox全选(区别jQuery版本)

    jQuery设置checkbox全选在网上有各种文章介绍,但是为什么在我们用他们的代码的时候就没有效果呢? 如果你的代码一点错误都没有,先不要急着怀疑人家代码的正确性,也许只是人家跟你用的jQuery ...

  8. XML3_XML元素和节点的具体解释

    就像一个树状的目录.可以把第一行当作它扎根的“土地”.XML文件是由节点构成的.它的第一个节点为“根节点”.一个XML文件必须有且只能有一 个根节点,其他节点都必须是它的子节点.我们在FLASH里使用 ...

  9. 操作系统和Python的发展历程

    一:操作系统的发展历史: 操作系统:什么是操作系统?我们首先想到的是电脑,,也就是所谓的Windows8,Windows7,或者XP系统和Windows10,当然也包括我们手机的安卓系统或者IPhon ...

  10. C++引用之声明方法

    引用就是某一变量的一个别名,对引用的操作就是对目标的操作. 引用的声明方法: 类型标识符 &引用名=目标变量名: 如: int a; int &ra=a; //定义引用ra,他是变量a ...