题目描述

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

在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种寿司的美味度为i+1(即寿司的美味度为从2到n)。

现在小G和小W希望每人选一些寿司种类来品尝,他们规定一种品尝方案为不和谐的当且仅当:小G品尝的寿司种类中存在一种美味度为x的寿司,小W品尝的寿司中存在一种美味度为y的寿司,而x与y不互质。

现在小G和小W希望统计一共有多少种和谐的品尝寿司的方案(对给定的正整数p取模)。注意一个人可以不吃任何寿司。
输入输出格式
输入格式:

从文件dinner.in中读入数据。

输入文件的第1行包含2个正整数n,p中间用单个空格隔开,表示共有n种寿司,最终和谐的方案数要对p取模。

输出格式:

输出到文件dinner.out中。

输出一行包含1个整数,表示所求的方案模p的结果。

输入输出样例
输入样例#1:

3 10000

输出样例#1:

9

输入样例#2:

4 10000

输出样例#2:

21

输入样例#3:

100 100000000

输出样例#3:

3107203

说明
【数据范围】

【时限1s,内存512M】

**代码
--**
/*
首先显然只需要考虑不超过 √n 的质因子对题目的影响。然后因为剩下的质因子只会出现至多一次,
因为对于n,质因数分解,最多只有一个质因子大于√n.再考虑这个大质数放哪个集合
我们记 f(S 1 , S 2 ) 表示两个集合中出现的质因子集合分别为S 1 , S 2 的方案数。
dp(j ,k, t) 为甲拿s1,乙拿s2,这个大质数放入t集合. t=0 or 1;
这样,转移的时候就只需考虑包含当前这个大于 n 的质因子的数放入那个集合中即可。
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
#define For(i,a,b) for(register int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(register int i=(a);i>=(b);--i)
#define LL long long
int pri[8]={2,3,5,7,11,13,17,19},n,mod;
int f[500][500],dp[500][500][2];
int ans=0;
struct node{int a,p;            //a:这个数的质因数集合  p:大质数bool operator < (const node & x) const {  return p<x.p;  }
}num[501];
void init(){f[0][0]=1;For(i,2,n){int tmp=i;For(j,0,7)if(tmp%pri[j]==0){while(tmp%pri[j]==0) tmp/=pri[j];num[i].a|=(1<<j);}num[i].p=tmp;   //不能被那八个质数除的部分为要求的大质数}}
int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifscanf("%d%d",&n,&mod);init();         // 预处理每个数的质因数集合与它的大质数sort(num+2,num+n+1);    //把质数相同的放一起讨论For(i,2,n){if(num[i].p==1 || num[i].p!=num[i-1].p){    //如果全在集合or换了一个质数,就是不同类.同类不能同时选For(j,0,256) For(k,0,256)dp[j][k][0]=dp[j][k][1]=f[j][k];}Rep(j,256,0) Rep(k,256,0){      if((num[i].a & k) == 0)          // 如果该数集合与第二个人没交集,则可以放入第一个人集合dp[j | num[i].a][k][1] = ((LL)dp[j | num[i].a][k][1]+ dp[j][k][1]) % mod;if((num[i].a & j) == 0)          // 同理放入第二个集合dp[j][k | num[i].a][0] = ((LL)dp[j][k | num[i].a][0] + dp[j][k][0]) % mod;}if(num[i].p==1 || num[i].p!=num[i+1].p)     //每次换类别时要改变方案情况Rep(j,256,0) Rep(k,256,0)f[j][k]=((LL)dp[j][k][0]+dp[j][k][1]-f[j][k])%mod;  //这个数两人都不选时dp0 dp1都有包含}For(i,0,256) For(j,0,256)if((i&j) == 0)(ans+=f[i][j])%=mod;printf("%d\n",(ans+mod)%mod);return 0;
}

[NOI2015]寿司晚宴(状态压缩动态规划)相关推荐

  1. 【动态规划】状态压缩动态规划

    整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...

  2. 【转】状态压缩动态规划

    引入  首先来说说"状态压缩动态规划"这个名称,顾名思义,状态压缩动态规划这个算法包括两个特点,第一是"状态压缩",第二是"动态规划". 状 ...

  3. 状态压缩动态规划 - 总结【普及+,提高-】

    状态压缩动态规划是一类特殊的动态规划,通常有一维用来表示一个二进制状态.状态压缩,顾名思义,就是把原来要一个bool数组表示状态压缩到一个int变量里.围绕状压DP,我们将介绍它的前世今生,领略状压D ...

  4. 【SGU 448】Controlled Tournament(状态压缩动态规划)

    题目链接 [SGU 448]Controlled Tournament 题目大意 给定比赛人员个数nnn,你希望赢的人的编号m" role="presentation" ...

  5. 状态压缩动态规划部分习题详解

    状态压缩动态规划部分习题详解 状压DP部分题目详解 状态压缩动态规划部分习题详解 简介 经典子集类问题 原子弹 最短路与状压DP结合 送礼物 P3959宝藏 旅游 经典网格类 铺地砖 一笔画 其他类型 ...

  6. 铺瓷砖问题 (状态压缩动态规划) (一)

    作者: Phill King 邮箱: phillking1982@163.com 原创文章,转载请注明出处. 题目地址:2411 -- Mondriaan's Dream 问题简单描述: 在一个N行M ...

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

    为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种 ...

  8. 状态压缩动态规划 -- 旅行商问题

    旅行商问题: N个点(N<16)的带权有向图D,求一条路径,使得这条路经过每一个点恰好一次. 而且路径上边的权值和最小(或者最大),或者求一条具有这样性质的回路. 状态压缩: 将二进制表示十进制 ...

  9. BZOJ4197: [Noi2015]寿司晚宴

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

最新文章

  1. 剑指offer:数字在排序数组中出现的次数
  2. http连接过程遇到的各种性能瓶颈
  3. Linux笔记:vim
  4. java 压缩汉字字节_java中计算汉字的字节数
  5. windows系统git服务器启动,windowsServer服务器上搭建GIt服务器
  6. “约见”面试官系列之常见面试题第八篇说说原型与原型链(建议收藏)
  7. 08-03 性能测试--数据准备与基准场景设
  8. js 指定年月获取最后天
  9. 封装Apache http client工具类
  10. Qt QLabel实现自动换行 字符断行 自适应
  11. 质量工程师(QA)岗位初介绍
  12. 总纲篇:产品结构设计指导VII(本博客指引章节)
  13. FancyCoverFlow(GalleryView)
  14. IDEA git 切换分支产生问题
  15. 【Endnote X9服务器运行失败】
  16. Halcon实例分析——check_blister.hdev
  17. 51单片机实验——LED灯(点亮、闪烁、流水)
  18. AD如何走蛇形线和圆角拐角
  19. vue单页面改造多页面应用
  20. WPS2019下开启宏,用于VBA编辑

热门文章

  1. 秋季吃些什么对身体好?
  2. html文本框超出范围,ppt出现文本框中输入文字超出文本框范围的详细操作
  3. (OK) MIMP - 17 ( 5 nodes) - 抓包-缺少JION - 节点5:客户端 mptcp-kmsg-client.txt - 分析原因
  4. 中国鸣网-最专业、快捷的学术期刊征稿、期刊投稿、杂志征稿平台
  5. linux安装redis5.0
  6. 微信小程序-录音文件无法播放问题
  7. C语言:VS中利用scanf_s函数输入字符串时出错
  8. 来自知乎 linux的一些玩法
  9. vue.js 密码加密_密码学初探:隐藏信息的艺术——区块链技术引卷之十一
  10. Pandownload关了,还有更牛逼的百度网盘全速下载方法