[BZOJ 1072] 排列perm
2024-09-01 12:51:54
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 ;
}
最新文章
- JavaBean学习总结(上)
- Apache多站点实现原理和配置
- Masonry(AutoLayout)的使用
- ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)
- 使用ConfigurationManager类读写配置文件
- css+div如何解决文字溢出
- [译]rabbitmq 2.5 Where’s my message? Durability and you
- sphinx下的max_matches取值对SetLimits的影响
- 手势解锁自定义View
- UPUPW PHP环境集成包
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题
- O-C相关-06:对象与对象的关系
- [转] 怎样快速而优雅地遍历 JavaScript 数组
- 7816的报文结构APDU
- mac在变化mysql-rootpassword-各种解决问题的能力
- Swift初探一
- 在COM组件中调用JS函数
- JAVA基础知识(1)
- 欧拉函数之HDU1286找新朋友
- SpringMvc+JavaConfig+Idea 搭建项目