题目大意:

求相邻元素互质的排列个数。

题目分析:

由于互质只与质因数有关,所以我们对于质因数种类相同的数合并为一类,特殊的,1,17,19,23是一类,因为没有数与他们不互质。

那么我们做各个位进制不同的状压DP。转移就是在末尾添加哪个数。

代码:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std; #define P __gcd int n,mod;
int tot,res,maxx; int GCD[][];
int a[];
//1,2,3,5,2*3,7,2*5,11,13,2*7,3*5,3*7,2*11,2*13
int bel[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int data[]={,,,,,,,,,,,,,};
int sum[];
int fac[]={,,,,,}; int f[][]; void GetSubSet(){
memset(a,,sizeof(a));maxx=;
for(int i=;i<=n;i++) a[bel[i]]++,maxx=max(maxx,bel[i]);
sum[] = ;
for(int i=;i<=maxx;i++) sum[i] = sum[i-]*a[i-]+sum[i-];
} vector<int> v[];
void dfs(int now,int dd,int num){
if(now > maxx){
v[num].push_back(dd);
}else{
for(int i=;i<=a[now];i++){
dfs(now+,dd+i*sum[now],num+i);
}
}
} int nw[];
void work(){
for(int i=;i<=maxx;i++) f[sum[i]][i] = ;
for(int i=;i<=n;i++) v[i].clear();
dfs(,,);
for(int i=;i<n;i++){
for(int j=;j<v[i].size();j++){
int p=v[i][j];
for(int k=maxx;k>=;k--){nw[k] = p/sum[k];p%=sum[k];}
p = v[i][j];
for(int k=;k<=maxx;k++){
if(nw[k] == || f[p][k]==) continue;
for(int l=;l<=maxx;l++){
if(a[l]-nw[l] == ||GCD[l][k]!=) continue;
f[p+sum[l]][l] += f[p][k];
f[p+sum[l]][l] %= mod;
}
}
}
}
int ans = ;
for(int i=;i<=maxx;i++) ans = (ans+f[v[n][]][i])%mod;
for(int i=;i<=maxx;i++)
ans=(ans*fac[a[i]])%mod;
printf("%d\n",ans);
} int main(){
int t; scanf("%d",&t);
for(int i=;i<;i++)for(int j=;j<;j++)GCD[i][j]=P(data[i],data[j]);
while(t--){
scanf("%d%d",&n,&mod);
memset(f,,sizeof(f));
GetSubSet();
work();
}
return ;
}

HDU4623 CRIME 【状压DP】【同类项合并】的更多相关文章

  1. [BZOJ4565][HAOI2016]字符合并(区间状压DP)

    https://blog.csdn.net/xyz32768/article/details/81591955 首先区间DP和状压DP是比较明显的,设f[L][R][S]为将[L,R]这一段独立操作最 ...

  2. ZOJ3802 Easy 2048 Again (状压DP)

    ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  3. 状压DP uvalive 6560

    // 状压DP uvalive 6560 // 题意:相邻格子之间可以合并,合并后的格子的值是之前两个格子的乘积,没有合并的为0,求最大价值 // 思路: // dp[i][j]:第i行j状态下的值 ...

  4. zoj3802:easy 2048 again(状压dp)

    zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...

  5. hdu4778:状压dp+博弈

    题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...

  6. BZOJ 2064: 分裂( 状压dp )

    n1+n2次一定可以满足..然后假如之前土地集合S1的子集subs1和之后土地集合S2的子集subs2相等的话...那么就少了2个+操作...所以最后答案就是n1+n2-少掉的最多操作数, 由状压dp ...

  7. [WC2008]游览计划(状压dp)

    题面太鬼畜不粘了. 题意就是给一张n*m的网格图,每个点有点权,有k个关键点,让你把这k个关键点连成一个联通快的最小代价. 题解 这题nmk都非常小,解法肯定是状压,比较一般的解法插头dp,但不太好写 ...

  8. 2018.10.24 bzoj2064: 分裂(状压dp)

    传送门 状压dp好题. 考虑对于两个给出的集合. 如果没有两个元素和相等的子集,那么只能全部拼起来之后再拆开,一共需要n1+n2−2n1+n2-2n1+n2−2. 如果有呢? 那么对于没有的就是子问题 ...

  9. 分裂 BZOJ2064 状压DP

    分析: 这个题很好啊,比起什么裸的状压DP高多了! 我们可以考虑,什么时候答案最大:全合并,之后再分裂 这样,我们必定可以得到答案,也就是说答案必定小于n+m 那么我们可以考虑,什么时候能够使答案更小 ...

随机推荐

  1. 关于x210开发板和主机、虚拟机ping通问题

    关于x210开发板和主机.虚拟机ping通问题: 步骤: 1.关闭 Ubuntu.关闭VMware软件: 2.打开 网络连接,设置 以太网 IP地址,并确认使用的网卡 3.以管理员身份打开VMware ...

  2. MIPI接口资料汇总(精)

    一.介绍 1.MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟.MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应 ...

  3. ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据

    要求是这样子的,在一个列表页中,用户点击详细铵钮,带记录的主键值至另一页.在另一外页中,获取记录数据,然后显示此记录数据在网页上. 先用动图演示: 昨天有分享为ng-click传递参数 <ang ...

  4. 线上分享-- 基于DDD的.NET开发框架-ABP介绍

    前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...

  5. [译]通往 Java 函数式编程的捷径

    原文地址:An easier path to functional programming in Java 原文作者:Venkat Subramaniam 译文出自:掘金翻译计划 以声明式的思想在你的 ...

  6. cgroup.conf系统初始配置

    # Slurm cgroup support configuration file # # See man slurm.conf and man cgroup.conf for further # i ...

  7. Quartz_配置

    quartz_jobs.xml job 任务 其实就是1.x版本中的<job-detail>,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可 name(必填) 任务名 ...

  8. Session之Config配置

    <sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" ...

  9. 批量实现多台服务器之间ssh无密码登录的相互信任关系

    最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...

  10. ELK基础架构解说-运维笔记

    一.ELK日志分析工具介绍1) Elasticsearch1.1)  Elasticsearch介绍ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...