[bzoj1072][SCOI2007]排列(状态压缩DP)
2024-10-01 00:00:48
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1072
分析:看了题解才知道,状态的设计很巧妙,用余数表示,即f[i][j]表示二进制状态i下余数为j的方案数,然后列一列式子就可以了,注意排除相同数字的情况。
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
const int maxn=;
int f[maxn+][];
char s[];
int t,d;
int main()
{
scanf("%d\n",&t);
while(t)
{
--t;
scanf("%s%d\n",s,&d);
int n=strlen(s);
memset(f,,sizeof(f));
int m=(<<n) - ;
for(int i=;i<n;++i) f[<<i][(s[i]-)%d]=;
for(int i=;i<=m;++i)
for(int j=;j<n;++j)
if((i&(<<j))!= && i-(<<j)>=)
for(int k=;k<d;++k)
f[i][(*k+(s[j]-))%d]+=f[i-(<<j)][k];
for(int i=;i<=;++i)
{
int ans=;
for(int j=;j<n;++j)
if(s[j]-==i) ++ans;
int c=;
for(int j=;j<=ans;++j) c*=j;
f[m][]/=c;
}
printf("%d\n",f[m][]);
}
return ;
}
最新文章
- openfire/spark/asmack 环境调试纪要
- 20145227 《Java程序设计》第6周学习总结
- [转载]浅析STL allocator
- 使用pdb调试python
- Ubuntu16.04更换漂亮绚丽flatabulous主题
- C# yield return用法
- Firebird数据库相关操作
- 深度学习Tensorflow生产环境部署(上&#183;环境准备篇)
- Vue.js 基本功能了解一下~
- git branch 分支管理
- PostgreSQL的checkpoint能否并行
- css控制字体线使用:text-decoration
- centos使用boost过程
- malloc,我误解你了
- python操作word之pywin32的安装
- Camera &; Render
- 使用Intent调用内置应用程序
- Educational Codeforces Round 51 (Rated for Div. 2)
- 在无TNS配置时,登录到数据库。
- 【jQuery】方法和选择器的双重使用详解