题目链接

  反正……我是没什么想法了,全程看题解

  (或者说自己想了半天错解)

  因为大于根n的质数最多只会在一个数里出现一种,所以可以把数拆成两部分:小数的二进制集合和大数。

  然后把大数一样的放到一起DP,设s[i][j]表示第一个集合为i第二个为j的方案数,f[i][j][k]是第一个集合为i第二个集合为j,当前数放进第k个集合里……

  转移当然比我那个sb的二维状态好转移啦

  

#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxs 11
#define maxn 600
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int prime[]={,,,,,,,,,,,,,,,};
int s[maxn][maxn],f[maxn][maxn][]; struct Number{
int state,p;
bool operator <(const Number a)const{
return p<a.p;
}
}q[maxn]; int main(){
int n=read(),mod=read();
for(int i=;i<=n;++i){
int ret=i;
q[i-].state=;
for(int j=;j<;++j){
int now=prime[j];
if(ret%now) continue;
q[i-].state|=(<<(j-));
while(ret%now==) ret/=now;
}
q[i-].p=ret;
}
sort(q+,q+n);
s[][]=;
for(int i=;i<n;++i){
Number now=q[i];
if(now.p==||now.p!=q[i-].p)
for(int S1=;S1<=;++S1)
for(int S2=;S2<=;++S2) f[S1][S2][]=f[S1][S2][]=s[S1][S2]; for(int S1=;S1>=;--S1)
for(int S2=;S2>=;--S2){
if((now.state&S2)==) f[now.state|S1][S2][]=(1LL*f[now.state|S1][S2][]+f[S1][S2][])%mod;
if((now.state&S1)==) f[S1][now.state|S2][]=(1LL*f[S1][now.state|S2][]+f[S1][S2][])%mod;
} if(now.p==||now.p!=q[i+].p)
for(int S1=;S1<=;++S1)
for(int S2=;S2<=;++S2) s[S1][S2]=((1LL*f[S1][S2][]+f[S1][S2][])%mod-s[S1][S2]+mod)%mod;
}
int ans=;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
if((i&j)==) ans=(ans+s[i][j])%mod;
printf("%d\n",ans);
return ;
}

【Luogu】P2150寿司晚宴(状压DP)的更多相关文章

  1. NOI 2015 寿司晚宴 (状压DP+分组背包)

    题目大意:两个人从2~n中随意取几个数(不取也算作一种方案),被一个人取过的数不能被另一个人再取.两个人合法的取法是,其中一个人取的任何数必须与另一个人取的每一个数都互质,求所有合法的方案数 (数据范 ...

  2. 【BZOJ-4197】寿司晚宴 状压DP

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 694  Solved: 440[Submit][Status] ...

  3. BZOJ 4197 NOI 2015 寿司晚宴 状压DP

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 694  Solved: 440[Submit][Status] ...

  4. [NOI2015]寿司晚宴 --- 状压DP

    [NOI2015]寿司晚宴 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴. 小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿 ...

  5. 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数

    [BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ...

  6. B4197 [Noi2015]寿司晚宴 状压dp

    这个题一开始想到了唯一分解定理,然后状压.但是显然数组开不下,后来想到每个数(n<500)大于19的素因子只可能有一个,所以直接单独存就行了. 然后正常状压dp就很好搞了. 题干: Descri ...

  7. [NOI2015]寿司晚宴——状压dp

    题目转化:将2~n的数分成两组,可以不选,使得这两组没有公共的质因子.求方案数. 选择了一个数,相当于选择了它的所有质因子. 30分: 发现,n<=30的时候,涉及到的质因子也就10个.2,3, ...

  8. [NOI2015][bzoj4197] 寿司晚宴 [状压dp+质因数]

    题面 传送门 思路 首先,要让两个人选的数字全部互质,那么有一个显然的充要条件:甲选的数字的质因数集合和乙选的数字的质因数集合没有交集 30pt 这种情况下n<=30,也就是说可用的质数只有10 ...

  9. bzoj4197 [Noi2015]寿司晚宴——状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4197 首先,两个人选的数都互质可以看作是一个人选了一个数,就相当于选了一个质因数集合,另一个 ...

  10. BZOJ 4197: [Noi2015]寿司晚宴 状压dp+质因数分解

    挺神的一道题 ~ 由于两个人选的数字不能有互质的情况,所以说对于一个质因子来说,如果 1 选了,则 2 不能选任何整除该质因子的数. 然后,我们发现对于 1 ~ 500 的数字来说,只可能有一个大于 ...

随机推荐

  1. UVA12904 Load Balancing(中途相遇法)

    虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的. 要保证字典序最小,只要从小往大枚举就好了 感谢moonfl ...

  2. cv2.minAreaRect() 生成最小外接矩形

    简介   使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是所要求最小外接矩形的点集数组或向量,这个点集不定个数.   cv2 ...

  3. 掘金 里面 写文章 带目录的时候 用#(空格)标题 后面用## title,一个页面只有一个H1

    掘金 里面 写文章 带目录的时候 用#(空格)标题 后面用## title,一个页面只有一个H1

  4. Problem X: C语言习题 学生成绩输入和输出

    Problem X: C语言习题 学生成绩输入和输出 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4722  Solved: 2284[Submit] ...

  5. 源自http://www.cnblogs.com/sciencefans/p/4394861.html

    人脸识别的四大块:Face detection, alignment, verification and identification(recognization),本别代表从一张图中识别出人脸位置, ...

  6. 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起

    一.问题起源 一切起源于Apple官方文档里面关于单例(Singleton)的示范代码:Creating a Singleton Instance.主要的争议集中在下面这一段: static MyGi ...

  7. TypeError: Cannot read property 'tap' of undefined

    E:\vue-project\vue-element-admin-master>npm run build:prod vue-element-admin@3.8.1 build:prod E:\ ...

  8. NOIp2017囤题计划

    马上就要NOIp2017了,应该囤些题目吧…… 好的这只是一个开始 upd - 11.5 1.p1576 最小花费 无向图,dijisktra 2.p1339 [USACO09OCT]热浪Heat W ...

  9. vue里的数据

    背景: 一个项目完工在即,鉴于此,前端使用了vue,写下此栏,以供日后翻阅, 会涉及到我所运用到的vue相关知识,需要一定的js基础. 默认vue的single-file-components(单文件 ...

  10. leepcode作业解析-5-21

    25.Nim游戏 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编 ...