p2150 [NOI2015]寿司晚宴
分析
我们发现对于大于$\sqrt(n)$的数每个数最多只会包含一个
所以我们把每个数按照大质数的大小从小到大排序
我们知道对于一种大质数只能被同一个人取
所以f1表示被A取,f2表示被B取
最终答案就是这两个的答案减去啥都不去的答案
因为啥都不去会被重复记录两次
对于小质数则直接状压转移即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int p1[] = {,,,,,,,,};
const int cnt1 = ;
int dp[][],n,mod,f1[][],f2[][];
struct node {
int msk,ano;
};
node d[];
inline void init(int x){
int res=x+;
for(int i=;i<=cnt1;i++){
if(res==)break;
if(res%p1[i]==)d[x].msk|=(<<(i-));
while(res%p1[i]==)res/=p1[i];
}
d[x].ano=res;
}
inline bool cmp(const node x,const node y){return x.ano<y.ano;}
signed main(){
int i,j,k,p,q;
scanf("%lld%lld",&n,&mod);
n--;
for(i=;i<=n;i++)init(i);
sort(d+,d+n+,cmp);
dp[][]=;
for(i=;i<=n;i++){
if(d[i].ano==||d[i].ano!=d[i-].ano){
memcpy(f1,dp,sizeof(f1));
memcpy(f2,dp,sizeof(f2));
}
for(j=(<<)-;j>=;j--)
for(k=(<<)-;k>=;k--)if(!(j&k)){
int msk1=j|d[i].msk,msk2=k|d[i].msk;
if(!(msk1&k))f1[msk1][k]=(f1[msk1][k]+f1[j][k])%mod;
if(!(msk2&j))f2[j][msk2]=(f2[j][msk2]+f2[j][k])%mod;
}
if(d[i].ano==||d[i].ano!=d[i+].ano||i==n){
for(j=(<<)-;j>=;j--)
for(k=(<<)-;k>=;k--)if(!(j&k)){
dp[j][k]=(-dp[j][k]+mod)%mod;
dp[j][k]=(dp[j][k]+f1[j][k])%mod;
dp[j][k]=(dp[j][k]+f2[j][k])%mod;
}
}
}
int Ans=;
for(j=;j<(<<);j++)
for(k=;k<(<<);k++)
if(!(j&k))Ans=(Ans+dp[j][k])%mod;
cout<<Ans;
return ;
}
p2150 [NOI2015]寿司晚宴的更多相关文章
- 洛谷$P2150\ [NOI2015]$寿司晚宴 $dp$
		正解:$dp$ 解题报告: 传送门$QwQ$. 遇事不决写$dp$($bushi$.讲道理这题一看就感觉除了$dp$也没啥很好的算法能做了,于是考虑$dp$呗 先看部分分?$30pts$发现质因数个数 ... 
- UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)
		题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ... 
- 并不对劲的bzoj4197:loj2131:uoj129:p2150:[NOI2015]寿司晚宴
		题目大意 有两个集合\(S_1,S_2 \subseteq [2,n] (n\leq 500)\),且对于\(\forall x\in S_1,y\in S_2 , gcd(x,y)=1\) 求\(S ... 
- [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是给哪个 ... 
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
		BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ... 
- [NOI2015]寿司晚宴 --- 状压DP
		[NOI2015]寿司晚宴 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴. 小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿 ... 
- 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数
		[BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ... 
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
		[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ... 
随机推荐
- 接口测试基础——第一篇smtplib发送文字邮件
			现在我们就开始进入接口测试框架的知识准备阶段,今天是第一篇,很简单的,就是发送纯文字的电子邮件,会的童鞋可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8 impor ... 
- Jam的计数法
			Jam的计数法 题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数 ... 
- AppScan 8.0.3安全漏洞扫描总结
			本文记录了通过AppScan 8.0.3工具进行扫描的安全漏洞问题以及解决方案, 1.使用SQL注入的认证旁路 问题描述: 解决方案: 一般通过XSSFIlter过滤器进行过滤处理即可,通过XSSFI ... 
- 常用JavaScript操作页面元素的方法
			1.取得dropdownlist的选中值 var ddl =document.getElementById('<%=ddlusers.ClientID%>'); var index = d ... 
- mysql复制(高可用架构方案的基础)
			mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ... 
- 【转】 Pro Android学习笔记(九六):AsyncTask(5):横竖屏切换问题
			目录(?)[-] 横竖屏切换的问题 WeakReference 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flow ... 
- PHP中GD库的使用
			1.基本步骤 <?php /** * Created by PhpStorm. * User: jiqing * Date: 18-4-9 * Time: 上午9:34 * 熟悉步骤 */ // ... 
- Xdebug日志文件不显示
			Xdebug是一个很强大的调试php的软件,安装也很简单. 1.php_xdebug.dll 放入php目录下的ext文件中 2.php.ini中开启 [Xdebug] extension = &qu ... 
- 小程序中WXSS样式控制
			WXSS WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,WXSS 具 ... 
- 求n对括号的合法组合
			一道经典的面试题,求n对括号有多少种合法的组合. 抽象为2n个位置,每个位置可以有2种取值,总共有2^2n个组合,附加约束条件是要符合括号的语法,用来剪枝. 括号语法的合法性条件: 初始化左括号和右括 ... 
