bzoj 1072: [SCOI2007]排列perm
Description
给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0)。例如123434有90种排列能
被2整除,其中末位为2的有30种,末位为4的有60种。
solutio
这题复杂负很诡,爆搜可以过去
我写的状压DP,复杂度和搜索一样,\(O(10!*10*d* T)\)
设状态为 \(f[i][j]\) 表示已经选了序列中的位置状态为 \(i\) ,mod d等于 \(j\) 的方案数
转移运用读入优化的方法,直接 \(*10+a[i]\) 取模就行
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int N=15;
int f[1<<10][1005],t[15],mul[N];char s[N];
void work()
{scanf("%s",s);int n=strlen(s),d;int lim=(1<<n)-1;RG int i,j,k;scanf("%d",&d);f[0][0]=1;for(i=0;i<lim;i++){for(j=0;j<d;j++){if(!f[i][j])continue;for(k=0;k<n;k++){if((1<<k)&i)continue;f[i|(1<<k)][(j*10+s[k]-48)%d]+=f[i][j];}}}for(i=0;i<n;i++)t[s[i]-48]++;for(i=0;i<=9;i++)if(t[i])f[lim][0]/=mul[t[i]],t[i]=0;printf("%d\n",f[lim][0]);memset(f,0,sizeof(f));
}int main()
{int T;cin>>T;mul[0]=1;for(int i=1;i<=10;i++)mul[i]=mul[i-1]*i;while(T--)work();return 0;
}
转载于:https://www.cnblogs.com/Hxymmm/p/7728205.html
bzoj 1072: [SCOI2007]排列perm相关推荐
- bzoj 1072: [SCOI2007]排列perm(状压dp)
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2272 Solved: 1432 [Submit][ ...
- BZOJ 1072: [SCOI2007]排列perm [DP 状压 排列组合]
题意:给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0) 100%的数据满足:s的长度不超过10, 1<=d<=1000, 1<=T<=15 看到整 ...
- [BZOJ1072][SCOI2007]排列perm
[BZOJ1072][SCOI2007]排列perm 试题描述 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有 ...
- bzoj1072: [SCOI2007]排列perm
思路:状压dp,f[i][j]表示新的排列的状态为i(也就是新的排列已经选了哪些数),然后模d的余数为j的方案数. 但考虑到可能有些数会出现多次,假设一个数x出现了cnt[x]次,那么对于一个可行的答 ...
- BZOJ 1072 排列
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MB Description 给一个数字串s和正整数d, 统计s有多少种不同的排 ...
- [BZOJ 1072] 排列perm
Link: BZOJ 1072 传送门 Solution: 一道直接next_permutation纯暴力就能过的题? 难道2007年时大家都不知道next_permutation这个函数吗 还是用复 ...
- [BZOJ1072/SCOI2007]排列prem
Description 给一个数字串s和正整数d, 统计s有多少种不同的排列能被d整除(可以有前导0).例如123434有90种排列能被2整除,其中末位为2的有30种,末位为4的有60种. Input ...
- BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...
- bzoj 4517: [Sdoi2016]排列计数
4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MB Submit: 637 Solved: 396 [Submit][Stat ...
- BZOJ 1070: [SCOI2007]修车(最小费用最大流)
建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...
最新文章
- 不想被问年终奖?2018年春节自救攻略来了!
- 深度学习之Windows下安装faster-rcnn
- 买卖股票的最佳时机III
- 2016年10月20日 .NET Core 1.0.2 更新
- mysql设置账号过期
- 【设计素材】表格数据形平面海报素材
- 微信JS图片上传与下载功能--微信JS系列文章(三)
- 两个Android选择文件对话框
- Spring mvc 拦截静态资源配置管理
- java大神养成计划
- Android 权限汇总大全
- 一文读懂Faster RCNN(大白话,超详细解析)
- 模仿电影中黑客电脑界面,CMD装逼代码
- mov格式如何转换成mp4?详细步骤教程
- jzoj 5778 没有硝烟的战争
- 期货大佬给交易者的交易箴言,值得珍藏品读!
- iOS 初学者功能代码大集合,个人笔记
- linux 修改hosts立即生效设置
- Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成 1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对
- 2020北航计算机夏令营机试题目讲解