洛谷P2150 寿司晚宴
来源:互联网 发布:威海东大妇科乎有人 编辑:程序博客网 时间:2024/04/24 15:37
链接
https://www.luogu.org/problem/show?pid=2150
题解
考虑暴力,当
有一个常用到的性质就是,对于任何一个数字
可以只压这8个素数,
将
接下来是转移。
对于gp相等的数,我们划分到一组里去单独dp,因为这一组中只能让一个人选数,一个人选了另一个人就不能再这组里选了。
对于一个组,其giant prime是相同的,令
初始状态
那么我们每次加入组中的一个数
做完一组之后,要将
这样有BUG,没有大素数的那一组不能这样转移,这样转移方案数会变少,因为这一组中只要两个人不选相同的数字就行,和前面不一样。
这时直接
答案就是所有状态加起来。
代码
//状压DP #include <cstdio>#include <algorithm>#define maxn 1000#define ll long longusing namespace std;ll N, P, f[maxn][maxn], g[maxn][maxn], tp[maxn], hp[maxn], mark[maxn], prime[maxn], num[maxn], h[maxn][maxn];bool cmp(ll a, ll b){return hp[a]<hp[b];}void init(){ ll i, j; scanf("%lld%lld",&N,&P); for(i=2;i<=N;i++) { if(!mark[i])prime[++prime[0]]=i; for(j=1;j<=prime[0] and i*prime[j]<=N;j++) { mark[i*prime[j]]=1; if(i%prime[j]==0)break; } } for(i=2;i<=N;i++) { for(j=1;prime[j]*prime[j]<=N;j++)if(i%prime[j]==0)tp[i]|=(1<<j-1); for(;prime[j]<=i and j<=prime[0];j++)if(i%prime[j]==0)hp[i]=prime[j]; } for(i=2;i<=N;i++)num[i]=i; sort(num+2,num+N+1,cmp);}void dp(){ ll l, r, p, i, j, k, ans=0; f[0][0]=1; for(l=2;l<=N;l=r+1) { for(r=l;hp[num[r]]==hp[num[l]] and r<=N;r++);r--; if(hp[num[l]]!=0) { for(i=0;i<256;i++)for(j=0;j<256;j++)g[i][j]=f[i][j]; for(p=l;p<=r;p++) { k=tp[num[p]]; for(i=255;i>=0;i--) for(j=255;j>=0;j--) { if((i&j)or(j&k))continue; g[i|k][j]+=g[i][j]; } } for(i=0;i<256;i++)for(j=0;j<256;j++)f[i][j]=(g[i][j]+g[j][i]-f[i][j])%P; } else { for(p=l;p<=r;p++) { k=tp[num[p]]; for(i=255;i>=0;i--) for(j=255;j>=0;j--) { if(i&j)continue; f[i][j]%=P; if((j&k)==0)f[i|k][j]+=f[i][j]; if((i&k)==0)f[i][j|k]+=f[i][j]; } } } } for(i=0;i<256;i++)for(j=0;j<256;j++)ans=(ans+f[i][j])%P; printf("%lld",((ans%P)+P)%P);}int main(){ init(); dp(); return 0;}
- 洛谷P2150 寿司晚宴
- 寿司晚宴(dinner)
- NOI 2015 寿司晚宴
- BZOJ4197 [Noi2015]寿司晚宴
- 4197: [Noi2015]寿司晚宴
- bzoj4197 [Noi2015]寿司晚宴
- NOI 2015 寿司晚宴
- 【bzoj4197】[Noi2015]寿司晚宴
- Bzoj4197: [Noi2015]寿司晚宴
- 4197: [Noi2015]寿司晚宴
- 【bzoj4197】【NOI2015】寿司晚宴
- 【NOI2015】【寿司晚宴】【状压DP】
- 【bzoj4197】[Noi2015]寿司晚宴 dp
- bzoj 4197: [Noi2015]寿司晚宴
- BZOJ 4197 Noi2015 寿司晚宴
- BZOJ 4197: [Noi2015]寿司晚宴
- NOI2015 寿司晚宴 状压DP
- 【状压DP】【cofun1623】寿司晚宴
- TBB使用教程
- eclipse pom.xml 报错org.apache.maven.plugin.war.WarMojo的解决办法
- C# 保持图片的缩放比例
- mysql学习笔记(一) mysqlparameter
- 餐饮SAAS发展
- 洛谷P2150 寿司晚宴
- intellij idea自动提示方法快捷键
- 在阿里云服务器上部署上java项目后 域名仍不能访问的问题
- java7 ReentrantLock
- Linux压缩和加压文件
- [leetcode]74. Search a 2D Matrix
- Oracle 9i 安装图解
- windows cmd 命令行java (执行.class)
- viewpager 实现轮播可左右滑动,非封装