BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
Description
为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。
Input
输入文件的第 1 行包含 2 个正整数 n,p,中间用单个空格隔开,表示共有 n 种寿司,最终和谐的方案数要对 p 取模。
Output
输出一行包含 1 个整数,表示所求的方案模 p 的结果。
Sample Input
Sample Output
HINT
2≤n≤500
$g[i][j]$表示第一个人不选这个大质数的方案数,$h[i][j]$表示第二个数不选这个大质数的方案数
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int mod,f[266][266],g[266][266],h[266][266];
int mask=255,n;
int pr[22];
struct A {
int val,lp;
}a[550];
bool cmp(const A &x,const A &y){return x.lp<y.lp;}
int main() {
scanf("%d%d",&n,&mod);
int i,j,k,l;
pr[2]=0; pr[3]=1; pr[5]=2; pr[7]=3; pr[11]=4; pr[13]=5; pr[17]=6; pr[19]=7;
for(i=2;i<=n;i++) {
int tmp=i;
for(j=2;j*j<=tmp;j++) {
if(tmp%j==0) {
a[i-1].val|=(1<<pr[j]);
while(tmp%j==0) tmp/=j;
}
}
if(tmp!=1) {
if(tmp>19) a[i-1].lp=tmp;
else a[i-1].val|=(1<<pr[tmp]);
}
}
int lst=1;
sort(a+1,a+n,cmp);
f[0][0]=1;
for(i=1;i<n;i=lst+1) {
if(a[i].lp) {
while(lst<n-1&&a[lst+1].lp==a[i].lp) lst++;
for(j=0;j<=mask;j++) {
for(k=0;k<=mask;k++) {
g[j][k]=h[j][k]=f[j][k];
}
}
for(j=i;j<=lst;j++) {
for(k=mask;k>=0;k--) {
for(l=mask;l>=0;l--) {
if(!(k&l)&&!(a[j].val&l)) {
g[k|a[j].val][l]=(g[k|a[j].val][l]+g[k][l])%mod;
h[l][k|a[j].val]=(h[l][k|a[j].val]+h[l][k])%mod;
}
}
}
}
for(j=0;j<=mask;j++) {
for(k=0;k<=mask;k++) {
f[j][k]=((g[j][k]+h[j][k]-f[j][k])%mod+mod)%mod;
}
}
}else {
lst=i;
for(j=0;j<=mask;j++) {
for(k=0;k<=mask;k++) {
g[j][k]=f[j][k];
}
}
for(j=0;j<=mask;j++) {
for(k=0;k<=mask;k++) {
if(!(a[i].val&k)&&!(j&k)) {
(f[j|a[i].val][k]+=g[j][k])%=mod;
(f[k][j|a[i].val]+=g[k][j])%=mod;
}
}
}
}
}
int ans=0;
for(i=0;i<=mask;i++) {
for(j=0;j<=mask;j++) {
if(!(i&j)&&f[i][j]) ans=(ans+f[i][j])%mod;
}
}
printf("%d\n",ans);
}
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划的更多相关文章
- BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿 ...
- [NOI2015]寿司晚宴 --- 状压DP
[NOI2015]寿司晚宴 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴. 小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿 ...
- 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数
[BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ...
- [BZOJ4197][Noi2015]寿司晚宴
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 412 Solved: 279[Submit][Status] ...
- BZOJ 4197: [Noi2015]寿司晚宴( dp )
N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个 ...
- 状态压缩动态规划 状压DP
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ...
- 【bzoj4197】[Noi2015]寿司晚宴 分解质因数+状态压缩dp
题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ...
- NOI2015 寿司晚宴
今年NOI确实是在下输了.最近想把当时不会做的题都写一下. 题意 从2到n(500)这些数字中,选若干分给A,若干分给B,满足不存在:A的某个数和B的某个数的GCD不等于1. 对于寿司晚宴这题,标准解 ...
随机推荐
- day09_request&response学习笔记
============================================================ 一.HttpServletResponse接口 p.MsoNormal { m ...
- Linux下编译安装BOOST
linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装: #yum install gcc ...
- FFmpeg and x264 Encoding Guide
https://trac.ffmpeg.org/wiki/Encode/H.264 FFmpeg and H.264 Encoding Guide Contents Constant Rate Fac ...
- 子RelativeLayout与layout_alignParentBottom属性会撑大视图
如title所示,在一个子RelativeLayout中的某个元素如果设置了layout_alignParentBottom属性会导致这个RelativeLaytou的height wrap_cont ...
- jdbc连接阿里云服务器上的MySQL数据库 及 数据库IP限制
问题1:Jdbc 如何连接阿里云服务器上的MySQL数据库? 解决: 上截图: 其中IP是阿里云服务器的公网IP地址. 问题2: 刚开始接手开发的时候,使用Navicat连接阿里云服务器上的数据后 ...
- DDGScreenShot—图片擦除功能
写在前面 图片擦除功能,也是运用图片的绘制功能, 将图片绘制后,拿到相应的图片.当然,有一涨底图更明显 实现代码如下 /** ** 用手势擦除图片 - imageView --传图片 - bgView ...
- 用Maven实现一个protobuf的Java例子
注:试验环境在Mac Idea环境下 1. 介绍Protocol Buffers Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化.反序列化,常用于RP ...
- Python入门、练手、视频资源汇总,拿走别客气!
摘要:为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. ...
- String 和 new String
String s1=”welcome”; String s2= “welcome:; String s3 =new String(”welcome”); //新建对象 指向新的内存 比较内容 ...
- 由ping所引发的思考~
今天看了掘金一片关于ping原理的文章,https://juejin.im/entry/5af8d5e651882565bd25581c?utm_source=gold_browser_extensi ...