博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Noi2015]寿司晚宴
阅读量:4327 次
发布时间:2019-06-06

本文共 1621 字,大约阅读时间需要 5 分钟。

来自FallDream的博客,未经允许,请勿转载,谢谢。


 

为了庆祝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取模)。注意一个人可以不吃任何寿司。

n<=500

 

考虑状压dp,发现500以内的数字最多只会有一个大于19的因数,而19以内的质数只有8个

用f[i][j]表示一个人选的寿司含有质因数的状态是i,另一个人是j的方案数,我们按照大于19的因数排序,同一个因数一起转移即可

复杂度n*2^16

#include
#include
#include
#include
#define pa pair
#define mp(x,y) make_pair(x,y)#define MN 256using namespace std;inline int read(){ int x = 0; char ch = getchar(); while(ch < '0' || ch > '9') ch = getchar(); while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();} return x;}int n,P,f[1<<8][1<<8],G[1<<8][1<<8],H[1<<8][1<<8];const int S[8]={
2,3,5,7,11,13,17,19};pa num[505];void Solve(int x){ int T=num[x].second; for(int i=MN-1;~i;--i) for(int j=MN-1;~j;--j) { int g=G[i][j],h=H[i][j]; if(!(i&T)) { G[i][j|T]=((G[i][j|T]+g)%P+f[i][j])%P; if(num[x].first==1) (G[i][j|T]+=h)%=P; } if(!(j&T)) { H[i|T][j]=((H[i|T][j]+h)%P+f[i][j])%P; if(num[x].first==1) (H[i|T][j]+=g)%=P; } }}int main(){ n=read();P=read(); for(int i=2;i<=n;++i) { int t=i; for(int j=0;j<8;++j) for(;!(t%S[j]);num[i].second|=(1<

转载于:https://www.cnblogs.com/FallDream/p/Noi2015d1t3.html

你可能感兴趣的文章
内部类。
查看>>
我的大学生活-4-21-吕家尧
查看>>
5、手把手教React Native实战之盒子模型BoxApp
查看>>
18日站立会议
查看>>
UIDynamic(物理仿真)
查看>>
AngularJS Scope(作用域)
查看>>
HttpClient相关
查看>>
DEPHI XE5 XE6 ANDROID IOS开发的几点体会
查看>>
angular.js 验证码注册登录
查看>>
团队站立会议08
查看>>
软件自动化测试学习步骤
查看>>
vector 简单使用
查看>>
20139216网络攻防技术第七次作业
查看>>
Sublime Text 配置
查看>>
【杂谈】需要mark的一些东西
查看>>
P2731 骑马修栅栏 欧拉函数
查看>>
sort函数
查看>>
CentOS-6.3安装配置Nginx
查看>>
女陔说"你不懂我", 到底什么意思
查看>>
uva11149
查看>>