BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包
4197: [Noi2015]寿司晚宴
Time Limit: 10 Sec Memory Limit: 512 MB
Description
为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。
Input
输入文件的第 1 行包含 2 个正整数 n,p,中间用单个空格隔开,表示共有 n 种寿司,最终和谐的方案数要对 p 取模。
Output
输出一行包含 1 个整数,表示所求的方案模 p 的结果。
Sample Input
Sample Output
HINT
2≤n≤500
题解:
前8个质因子,状压
这n<=500的数都最多包含一个大于根号n的质因子
跑01背包
#include<bits/stdc++.h>
using namespace std;
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N=+,M=1e6+,inf=; int p[] = {,,,,,,,};
int dp[][(<<)+][(<<)+],pd[][(<<)+][(<<)+],n,P,f[N],has[(<<)+][(<<)+];
vector<int > fi,se[N];
int main() {
scanf("%d%d",&n,&P);
for(int i = ; i <= n; ++i) {
int tmp = i,now = ;
for(int j = ; j < ; ++j)
while(tmp%p[j] == ) now|=(<<j),tmp/=p[j];
if(tmp == )
f[i] = now,fi.push_back(i);
else
f[i] = now,se[tmp].push_back(i);
}
int now = ;
dp[][][] = ;
for(int g = ; g < fi.size(); ++g) {
int u = fi[g];
now ^= ;
memset(dp[now],,sizeof(dp[now]));
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) {
if((j&f[u])==) dp[now][i|f[u]][j] += dp[now^][i][j]%P,dp[now][i|f[u]][j]%=P;
if((i&f[u])==) dp[now][i][j|f[u]] += dp[now^][i][j]%P,dp[now][i][j|f[u]]%=P;
dp[now][i][j] += dp[now^][i][j]%P,dp[now][i][j]%=P;
}
}
for(int S = ; S <= n; ++S) {
if(se[S].size() == ) continue;
int tmp = now;
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) has[i][j] = pd[tmp][i][j] = dp[now][i][j]; for(int g = ; g < se[S].size(); ++g) {
now ^= ;
memset(dp[now],,sizeof(dp[now]));
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) {
int u = se[S][g];
if((i&f[u])==) dp[now][i][j|f[u]] += dp[now^][i][j]%P,dp[now][i][j|f[u]]%=P;
dp[now][i][j] += dp[now^][i][j]%P,dp[now][i][j]%=P;
}
}
for(int g = ; g < se[S].size(); ++g) {
tmp ^= ;
memset(pd[tmp],,sizeof(pd[tmp]));
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) {
int u = se[S][g];
if((j&f[u])==) pd[tmp][i|f[u]][j] += pd[tmp^][i][j]%P,pd[tmp][i|f[u]][j]%=P;
pd[tmp][i][j] += pd[tmp^][i][j]%P,pd[tmp][i][j]%=P;
}
}
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) dp[now][i][j] += ((pd[tmp][i][j] - has[i][j])%P+P)%P,dp[now][i][j] %= P;
}
int ans = ;
for(int i = ; i < (<<); ++i)
for(int j = ; j < (<<); ++j) if((i&j) == )ans += dp[now][i][j],ans %= P;
printf("%d\n",ans);
return ;
}
BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包的更多相关文章
- 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]寿司晚宴
Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NO ...
- BZOJ 4197: [Noi2015]寿司晚宴 状压dp+质因数分解
挺神的一道题 ~ 由于两个人选的数字不能有互质的情况,所以说对于一个质因子来说,如果 1 选了,则 2 不能选任何整除该质因子的数. 然后,我们发现对于 1 ~ 500 的数字来说,只可能有一个大于 ...
- bzoj 4197: [Noi2015]寿司晚宴【状压dp】
一个数内可能多个的质因数只有小于根号n的,500内这样的数只有8个,所以考虑状压 把2~n的数处理出小于根号500的质因数集压成s,以及大质数p(没有就是1),然后按p排序 根据题目要求,拥有一个质因 ...
- bzoj 4199 [NOI2015]寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- 4197: [Noi2015]寿司晚宴
状压dp. 500分解质因数的话,除了最大的质因数只需要8个质数,用二进制x储存,最大的质因数用y来储存(若没有比那8个质数大的质因数就使y=1) 用f[i][j]表示第一个人方案为i,第二个人方案为 ...
- Relocation - POJ 2923(状态压缩+01背包)
题目大意:有个人需要搬家,有N件物品,给个物品的重量是 w[i] 然后又两个车,每个车的载重量分别是C1和C2,求最少需要运输多少次才能把这些物品全部运输完毕. 分析:刚开始就发现物品数不多,想着直接 ...
- [BZOJ4197][Noi2015]寿司晚宴
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 412 Solved: 279[Submit][Status] ...
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
随机推荐
- ER模型图工具:PowerDesigner
导读:开始是想一个阶段一个阶段的写文档,再写了可行性分析报告之后,发现这种方法整体性不强,写出来的文档也总是有考虑不周的地方.后来,就看完了全部的软工视频再写.现在该写项目开发总结报告了.在写文档的过 ...
- Error Domain=AVFoundationErrorDomain Code=-11800 "这项操作无法完成"
在iOS上开发视频操作的时候,出现错误: 录制视频错误:Error Domain=AVFoundationErrorDomain Code=-11800 "这项操作无法完成" Us ...
- 【Luogu】P1072Hankson的趣味题(gcd)
这题真TM的趣味. 可以说我的动手能力还是不行,想到了算法却写不出来.以后说自己数论会GCD的时候只好虚了…… 我们首先这么想. x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x ...
- BZOJ 1419 Red is good ——期望DP
定义f[i][j]表示还剩i张红牌,j张黑牌的时候能取得的期望最大值 显然有$f[i][j]=max(0,\frac {i}{i+j}(f[i-1][j]+1)+ \frac {j}{i+j}(f[i ...
- 刷题总结——宠物收养所(bzoj1208)
题目: Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明 ...
- unity的List构造函数在IOS平台存在缺陷
当迩使用一个int[]或者string[]类似的数组时,以数组来初始化List对象,有可能在IOS平台上会出现初始化对象为空,比如 , }; List<int> listTest = ne ...
- ShareSDK中微信分享错误总结
项目中用到微信分享,可向好友或朋友圈分享链接时,分享人可以打开网站,查看消息者却始终不能打开网站.试了N种方法,重写了N次分享模块,均没办法解决. 在无意中查看分享链接时发现,朋友圈里分享后,原始链接 ...
- BZOJ——1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- 洛谷——P2074 危险区域
P2074 危险区域 题目背景 一个恐怖组织在一座城市中安放了定时炸弹,其威力巨大,现在这里的警长想知道最坏的情况下会有多少街区受威胁. 题目描述 在一个城市有N*M个街区,每个街区由坐标描述,如图所 ...
- 关于SIP一些总结
SIP(session Initiation protocol)会话初始协议,是应用层信令控制协议,主要应用于创建.修改.释放多媒体会话. 一般而言,SIP只负责不同UE之间的协商与通信,比如媒体能力 ...