[BZOJ 1072] 排列perm
Link:
Solution:
一道直接next_permutation纯暴力就能过的题?
难道2007年时大家都不知道next_permutation这个函数吗
还是用复杂度更优的状压DP吧
设$dp[i][j]$为状态为$i$且对$d$余$j$的个数,
注意$dp[(1<<len)-1][0]$最后除去$\prod_{i=0}^9 cnt[i]!$,排除重复项
现在对状压DP状态的选取有了些感悟,
一般来说第一项表示状态,而第二项表示的一般都是于答案相关且包含答案情况的
(EX:求整除,表示当前对$d$的余数)
Code:
#include <bits/stdc++.h> using namespace std; int T,d,len,cnt[],dupli[],dp[][];
char s[]; int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%s %d",s,&d);len=strlen(s);
for(int i=;i<;i++) dupli[i]=;
memset(cnt,,sizeof(cnt));memset(dp,,sizeof(dp)); for(int i=;i<len;i++)
cnt[s[i]-'']++,dupli[s[i]-'']*=cnt[s[i]-'']; dp[][]=;
for(int i=;i<(<<len);i++)
for(int j=;j<d;j++)
if(dp[i][j])
for(int k=;k<len;k++)
if(!(i&(<<k)))
dp[i|(<<k)][(j*+(s[k]-''))%d]+=dp[i][j]; for(int i=;i<=;i++) dp[(<<len)-][]/=dupli[i];
printf("%d\n",dp[(<<len)-][]);
}
return ;
}
[BZOJ 1072] 排列perm的更多相关文章
- BZOJ 1072 排列
Description 给一个数字串\(s\)和正整数\(d\), 统计\(s\)有多少种不同的排列能被\(d\)整除(可以有前导\(0\)).例如\(123434\)有\(90\)种排列能被\(2\ ...
- 【BZOJ】【1072】【SCOI2007】排列perm
暴力 ……傻逼题我还WA了这么多次(有几次是忘了删调试信息……sigh) 直接统计0~9各有多少个,枚举数字就行了……因为是直接枚举的数字,而不是枚举用了s中的哪一位,所以是不用去重的!(我一开始写的 ...
- BZOJ 1072: [SCOI2007]排列perm 状态压缩DP
1072: [SCOI2007]排列perm Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为 ...
- [BZOJ 1072] [SCOI2007] 排列perm 【状压DP】
题目链接:BZOJ 1072 这道题使用 C++ STL 的 next_permutation() 函数直接暴力就可以AC .(使用 Set 判断是否重复) 代码如下: #include <io ...
- BZOJ 1072 [SCOI2007]排列perm
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1268 Solved: 782[Submit][Sta ...
- bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...
- SCOI2007排列perm
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 805 Solved: 497[Submit][Stat ...
- [BZOJ1072][SCOI2007]排列perm 状压dp
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2488 Solved: 1546[Submit][St ...
- bzoj1072【SCOI2007】排列perm
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1479 Solved: 928 [id=1072&q ...
随机推荐
- 用JQuery的$.getJSON发起跨域Ajax请求
jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...
- UVA 11995 STL 使用
There is a bag-like data structure, supporting two operations: 1 x Throw an element x into the bag. ...
- 解读python小练习
1.新建一个函数,判断是不是int 类型,并测试,不是抛出错误def adder(x, y):"""Return x + y if they are both integ ...
- 封装getByClass(JS获取class的方法封装为一个函数)
获取方法一(普通版) 获取单一的class: function getByClass(oParent, sClass) {//两个形参,第一个对象oParent 第二个样式名class var aEl ...
- c++ fstream用法(2)
一> #include "stdafx.h" #include<iostream> #include<string> #include<fstr ...
- API教程
www.yuanjiaocheng.net http://www.yuanjiaocheng.net/webapi/test-webapi.html
- jaspersoft中分组打印
一:前言 使用IReport已经四个月了,最近在做一个保镖,是要按照类型分类,并且这些类型要横着打印,最后还要算这个类型金额的总值,这张报表现是说需要用到子报表,最后和一个同事一起用group来分组做 ...
- SpringMVC——helloword入门
参考 http://www.cnblogs.com/bigdataZJ/p/springmvc1.html 文章主要讲述以下内容: 搭建环境 静态请求拦截 动态请求拦截 补充: 1.Controlle ...
- bzoj 1878 SDOI2009树状数组 离线操作
本来想写2120的,结果想起来了这个 我们先对于询问左端点排序,用树状数组存区间字母个数,对于每种字母, 第一次出现的位置记录为1,剩下的记录为0,然后记录下,每种颜色 后面第一个和他相同颜色的位置 ...
- 自己申请了苹果的ID号,如何输入到平板上,从而换掉原先的其他账号呢?
刚买了Ipad平板电脑,一直是用商家给我设置的ID,但是时间一长,我希望用自己的ID来玩我的平板,便于下载程序,更新程序,不用每次去问人家密码是多少. 申请IPAD ID 的网站是:http://ww ...