[BZOJ4197][Noi2015]寿司晚宴
4197: [Noi2015]寿司晚宴
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 412 Solved: 279
[Submit][Status][Discuss]
Description
为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。
Input
输入文件的第 1 行包含 2 个正整数 n,p,中间用单个空格隔开,表示共有 n 种寿司,最终和谐的方案数要对 p 取模。
Output
输出一行包含 1 个整数,表示所求的方案模 p 的结果。
Sample Input
Sample Output
HINT
2≤n≤500
Source
30分做法:
考虑对于每个质数状压DP,f[i][j]表示第一个人选取集合为i,第二个人选取集合为j的方案数。比较简单的DP。
100分做法:
对于大于$\sqrt n$的质数,每个数至多包含1个这样的因子,所以可以对小于$\sqrt n$的质数,这样的数至多有8个。
对于每个数,对其大于$\sqrt n$的质因子分类,分别做DP即可。dp[i][j][2]表示第一个人选取集合为i,第二个人选取集合为j,质因子分给第i个人的方案数。
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
int f[<<][<<],n,mod,dp[<<][<<][];
int prime[]={,,,,,,,},tot,ans;
struct node{int p,S;}a[];
bool operator<(node x,node y){return x.p<y.p;}
inline void solve(int x)
{
int now=;
for(int i=;i<;i++)
if(!(x%prime[i]))
{
now|=<<i;
while(!(x%prime[i]))x/=prime[i];
}
a[++tot]=(node){x,now};
}
int main()
{
scanf("%d%d",&n,&mod);
f[][]=;
for(int i=;i<=n;i++)solve(i);
sort(a+,a+tot+);
for(int l=,r;l<=tot;l=r+)
{
for(r=l;r<tot&&a[r+].p==a[r].p&&a[r].p!=;r++);
for(int i=;i<;i++)
for(int j=;j<;j++)
dp[i][j][]=dp[i][j][]=f[i][j];
for(int k=l;k<=r;k++)
{
for(int i=;~i;i--)
{
int now=-i;
for(int j=now;;j=(j-)&now)
{
if((a[k].S&j)==)
{
dp[i|a[k].S][j][]+=dp[i][j][];
if(dp[i|a[k].S][j][]>=mod)
dp[i|a[k].S][j][]-=mod;
}
if((a[k].S&i)==)
{
dp[i][j|a[k].S][]+=dp[i][j][];
if(dp[i][j|a[k].S][]>=mod)
dp[i][j|a[k].S][]-=mod;
}
if(!j)break;
}
}
}
for(int i=;i<;i++)
for(int j=;j<;j++)
{
f[i][j]=dp[i][j][]+dp[i][j][]-f[i][j];
if(f[i][j]>=mod)f[i][j]-=mod;
if(f[i][j]<)f[i][j]+=mod;
}
}
for(int i=;i<;i++)
{
int now=-i;
for(int j=now;;j=(j-)&now)
{
ans+=f[i][j];
if(ans>=mod)ans-=mod;
if(!j)break;
}
}
printf("%d\n",ans);
}
[BZOJ4197][Noi2015]寿司晚宴的更多相关文章
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ...
- BZOJ4197 [Noi2015]寿司晚宴 【状压dp】
题目链接 BZOJ4197 题解 两个人选的数都互质,意味着两个人选择了没有交集的质因子集合 容易想到将两个人所选的质因子集合作为状态\(dp\) \(n\)以内质数很多,但容易发现\(\sqrt{n ...
- bzoj4197 [Noi2015]寿司晚宴——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4197 首先,两个人选的数都互质可以看作是一个人选了一个数,就相当于选了一个质因数集合,另一个 ...
- 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数
[BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ...
- 【BZOJ-4197】寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[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种不同的寿 ...
- BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿 ...
随机推荐
- Javascript模块化编程(二):AMD规范
Javascript模块化编程(二):AMD规范 作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_d ...
- Libvlc API 简单说明 [转]
Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...
- centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)
首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...
- C语言 独木舟问题
n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析:贪心算法,抽象化 ...
- Can I Win
In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...
- 应用市场中包名(package name)的唯一性
一般的应用商店,在开发者上传应用(APP)的时候,都会对应用的包名进行唯一性的校验.如果此时,用户上传的应用的包名与数据库中的已有的APP的包名一样,那么正常情况下,该应用就不能上传,而弹出提示说,该 ...
- urlencode遇到中文编码问题
urlencode并不会改变输入的编码格式, 默认会将中文输出为 gbk 编码, 类似的, quote 会对中文进行 gbk 编码 不过, 当遇到嵌套多层的字典时, 问题就来了, 中文会被 utf8 ...
- LL(1)文法
<源程序>→<外部声明>|<外部声明><函数体> <外部申明>→<头文件><函数声明>|其他声明 <函数体&g ...
- 顺序查找SequentialSearch
#include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...
- mvc file控件无刷新异步上传操作
前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...