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. 对于寿司晚宴这题,标准解 ...
随机推荐
- oracle的for和i++
很长时间没用oracle的储存了,这次用到一次i++i++的sql语句:declarei_1 number(30) :=0;begin i_1 :=i_1+1;//i_1=1 insert into ...
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- Kali Linux Live USB初始化+使用日记
1.Live USB制作官方guide:Making a Kali Bootable USB Drive:https://docs.kali.org/downloading/kali-linux-li ...
- Django push: Using Server-Sent Events and WebSocket with Django
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/ The goal of ...
- java面试题,附个人理解答案
一,面向对象的特征:1.抽象 包括数据抽象跟行为抽象,将对象共同的特征取出形成一个类2.继承 被继承类为基类/超类,继承类为子类/派生类3.封装 多次使用道德数据或方法,封装成类,方便多次重复调用4. ...
- Oracle12c中数据泵新特性之功能增强(expdp, impdp)
Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1. 禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展 ...
- XGBoost算法--学习笔记
学习背景 最近想要学习和实现一下XGBoost算法,原因是最近对项目有些想法,准备做个回归预测.作为当下比较火的回归预测算法,准备直接套用试试效果. 一.基础知识 (1)泰勒公式 泰勒公式是一个用函数 ...
- Python测试远程端口连接时间
问题 最近自己服务器访问别人的服务器,有时候会报超时错误,有时候又能够正常访问别人服务器. 思路 最开始猜测是网络不稳定造成的,但是自己没有收集什么时候超时,什么时候能正常访问别人服务器的日志,搞网络 ...
- C#高级编程笔记之第三章:对象和类型
类和结构的区别 类成员 匿名类型 结构 弱引用 部分类 Object类,其他类都从该类派生而来 扩展方法 3.2 类和结构 类与结构的区别是它们在内存中的存储方式.访问方式(类似存储在堆上的引用类型, ...
- linux监控系统的状态
1.命令w的第一行和uptime或者用upload2.system load averages 表示单位时间短内活动的进程数3.查看cpu的个数和核数processor.physical id 4.v ...