状压dp。

500分解质因数的话,除了最大的质因数只需要8个质数,用二进制x储存,最大的质因数用y来储存(若没有比那8个质数大的质因数就使y=1)

用f[i][j]表示第一个人方案为i,第二个人方案为j时的方案数。

递推时用p[0/1][i][j]表示第1/2个人选当前数,i和j分别为两人方案时的方案数。

有f[i][j]=(p[0][i][j]+p[1][i][j]-f[i][j])%mod。 因为p数组都选了当前数,导致之前的方案计算两遍。

转移方程很好懂。

//quick
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 300 + 10;
const int d[]={2,3,5,7,11,13,17,19};
int f[maxn][maxn];
int p[3][maxn][maxn];
int n,mod,res;
struct data {
int x,y;
}a[600]; bool cmp(data a,data b) {
return a.y<b.y || (a.y==b.y && a.x<b.x);
} inline void build() {
for(int i=2,t;i<=n;i++) {
t=i;
for(int j=0;j<8;j++) if(t%d[j]==0) {
a[i].x=a[i].x|(1<<j);
while(t%d[j]==0) t/=d[j];
if(t==1) break;
}
a[i].y=t;
}
} int main() {
scanf("%d%d",&n,&mod);
build();
sort(a+2,a+n+1,cmp);
f[0][0]=1;
for(int i=2;i<=n;i++) {
if(a[i].y==1 || a[i].y!=a[i-1].y) {
memcpy(p[1],f,sizeof(f));
memcpy(p[2],f,sizeof(f));
}
for(int j=255;j>=0;j--)
for(int k=255;k>=0;k--) if((j&k)==0) {
if((k&a[i].x)==0) p[1][j|a[i].x][k]=(p[1][j|a[i].x][k]+p[1][j][k])%mod;
if((j&a[i].x)==0) p[2][j][k|a[i].x]=(p[2][j][k|a[i].x]+p[2][j][k])%mod;
}
if(a[i].y==1||i==n||a[i].y!=a[i+1].y) {
for(int j=0;j<=255;j++)
for(int k=0;k<=255;k++) if((j&k)==0)
f[j][k]=(((p[1][j][k]+p[2][j][k]-f[j][k])%mod)+mod)%mod;
}
}
for(int i=0;i<=255;i++)
for(int j=0;j<=255;j++)
res=(res+f[i][j])%mod; printf("%d\n",res);
return 0;
}

4197: [Noi2015]寿司晚宴的更多相关文章

  1. BZOJ 4197: [Noi2015]寿司晚宴( dp )

    N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个 ...

  2. BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec  Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿 ...

  3. [BZOJ]4197: [Noi2015]寿司晚宴

    Time Limit: 10 Sec  Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NO ...

  4. bzoj 4197: [Noi2015]寿司晚宴【状压dp】

    一个数内可能多个的质因数只有小于根号n的,500内这样的数只有8个,所以考虑状压 把2~n的数处理出小于根号500的质因数集压成s,以及大质数p(没有就是1),然后按p排序 根据题目要求,拥有一个质因 ...

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

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

  6. [BZOJ4197][Noi2015]寿司晚宴

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

  7. BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划

    BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...

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

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

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

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

随机推荐

  1. Ubuntu多系统安装注意事项

    1. 安装 选择分区时一定要全设置成逻辑分区,不能是主分区! 2.多系统引导向修复 利用LiveCD制作U盘启动进入Ubuntu系统,若挂载点为: /dev/sda9             swap ...

  2. highCharts 电流表、电压表

    var highChartsSettingV = { chart: { margin: [5, 2, 5, 8], type: 'gauge', plotBorderWidth: 1, plotBac ...

  3. 使用SpringMVC+mybatis+事务控制+JSON 配置最简单WEB

    最近在总结一些项目的基础知识,根据公司最近的一些意向和技术路线,初步整理了一个简单的配置例子     1.使用springmvc代替strutsMVC     2.使用请求json数据串的方式代替传统 ...

  4. WEB前端常用的测试工具

    一.QUnit 前端测试工具 QUnit是一个强大的JavaScript单元测试框架,该框架是由jQuery团队的成员所开发,并且是jQuery的官方测试套件.Qunit是Jquery的单元测试框架, ...

  5. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  6. 【模板】Big-Step-Giant-Step 大步小步

    求一个 的最小整数解 bsgs 当h是质数的时候使用 extbsgs 不满足上面那种情况的时候 具体参见http://tonyfang.is-programmer.com/posts/178997.h ...

  7. solr4.5部署

    一.服务器部署 1.solr自带jetty服务器上部署 cd到solr-4.5.0\example目录下,运行java -jar start.jar即可运行jetty服务器.访问http://loca ...

  8. POJ1159Palindrome

    http://poj.org/problem?id=1159 题意 : 给定一个字符串,问最少插入多少字符,使该字符串变成回文串 思路 : 设原字符串序为X,逆序列为Y,则最少需要补充的字母数 = X ...

  9. hdu 2582 f(n) 数学

    打表找规律: 当n为质数是,GCD(n)=n; 当n为质数k的q次方时,GCD(n)=k; 其他情况,GCD(n)=1. 代码如下: #include<iostream> #include ...

  10. 套题T5//各种树

    树(tree) [题目描述] 方方方种下了三棵树,一年后,第一棵树长出了n个节点. 方方方会向你提出m个询问,每个询问给出两个数i,j,你需要回答i号节点和j号节点在树上的距离. [输入数据] 第一行 ...