题目描述

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

输入输出格式

输入格式:

从文件dinner.in中读入数据。

输入文件的第1行包含2个正整数n,p中间用单个空格隔开,表示共有n种寿司,最终和谐的方案数要对p取模。

输出格式:

输出到文件dinner.out中。

输出一行包含1个整数,表示所求的方案模p的结果。

输入输出样例

输入样例#1:

3 10000

输出样例#1:

9

输入样例#2:

4 10000

输出样例#2:

21

输入样例#3:

100 100000000

输出样例#3:

3107203题解:小于√500的素数有8个,对于题意,可以理解为两人不能有同一素数倍数的寿司比如选了6,相当于选了2,3,则;另一人不能选2,3的倍数用8为二进制数来保存情况,状压dpf[j][k]表示小G为j小W为k的方案数,p[1][j][k]表示小G选,p[2][j][k]表示小w选注意一个数可能有大于√500的因数,但显然只能有一个,记录下为ki,如果ki相同也不能选转移后f[j][k]=p[1][j][k]+p[2][j][k]-f[j][k]减去f[j][k]是因为p[1],p[2]都算了f[j][k],所以减去
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 struct Node
 7 {
 8     int se,ki;
 9 } s[1201];
10 int prime[8]= {2,3,5,7,11,13,17,19};
11 int n;
12 int p[3][601][601],f[601][601],Mod,ans;
13 bool cmp(Node a,Node b)
14 {
15     if (a.ki!=b.ki) return a.ki<b.ki;
16     else return a.se<b.se;
17 }
18 int main()
19 {int i,j,k;
20     //freopen("1.out","w",stdout);
21     cin>>n>>Mod;
22     for (int i=1; i<=n; i++)
23     {
24         int tmp;
25         tmp=i;
26         //cout<<i<<endl;
27         for (int j=0; j<8; j++)
28         {
29             if (tmp%prime[j]==0)
30             {
31                 s[i].se|=1<<j;
32                 while (tmp%prime[j]==0) tmp/=prime[j];
33             }
34         }
35         s[i].ki=tmp;
36     }
37     sort(s+2,s+n+1,cmp);
38     f[0][0]=1;
39     for (int i=2; i<=n; i++)
40     {
41         if (i==2||s[i].ki==1||s[i].ki!=s[i-1].ki)
42         {
43             for (int j=0; j<=255; j++)
44             {
45                 for (int k=0; k<=255; k++)
46                 {
47                 p[1][j][k]=f[j][k];
48                 p[2][j][k]=f[j][k];
49                 }
50             }
51         }
52         for (int j=255; j>=0; j--)
53         {
54             for (int k=255; k>=0; k--)
55             {
56                 if ((k&s[i].se)==0) p[1][j|s[i].se][k]=(p[1][j|s[i].se][k]+p[1][j][k])%Mod;
57                  if ((j&s[i].se)==0) p[2][j][k|s[i].se]=(p[2][j][k|s[i].se]+p[2][j][k])%Mod;
58             }
59         }
60         if (i==n||s[i].ki==1||s[i].ki!=s[i+1].ki)
61         {
62             for (int j=0; j<=255; j++)
63             {
64                 for (int k=0; k<=255; k++)
65                 {
66                     f[j][k]=((p[1][j][k]+p[2][j][k]-f[j][k])%Mod+Mod)%Mod;
67                 }
68             }
69         }
70     }
71     for (int i=0; i<=255; i++)
72     {
73         for (int j=0; j<=255; j++)
74         {
75             if ((i&j)==0)
76             {
77             //printf("%d %d %d\n",f[i][j],i,j);
78                     ans=(ans+f[i][j])%Mod;
79             }
80         }
81     }
82     cout<<ans;
83 }

转载于:https://www.cnblogs.com/Y-E-T-I/p/7204037.html

[NOI2005]寿司晚宴相关推荐

  1. 周末狂欢赛4(1-02E. JM的西伯利亚特快专递,寿司晚宴,荷马史诗)

    文章目录 T1:1-02E. JM的西伯利亚特快专递 题目 题解 code T2:寿司晚宴 题目 题解 code T3:荷马史诗 题目 题解 code T1:1-02E. JM的西伯利亚特快专递 题目 ...

  2. [NOI2015]寿司晚宴(状压dp)

    为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种 ...

  3. BZOJ4197: [Noi2015]寿司晚宴

    Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...

  4. Bzoj4197 寿司晚宴

    Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...

  5. [NOI2015]寿司晚宴(状态压缩动态规划)

    题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1 ...

  6. BZOJ 4197 NOI 2015 寿司晚宴

    题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...

  7. 题解报告——寿司晚宴

    题目传送门 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3 ...

  8. NOI 2015 寿司晚宴

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 813 Solved: 508 [Submit][Status] ...

  9. 【BZOJ4197】寿司晚宴,状态压缩DP

    Time:2016.06.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 比较巧妙的处理方法 关于互质这个问题很多都是出现在数论题目里 显然这个不是-- 看到500这个数据范围 ...

最新文章

  1. C语言 文件操作10--配置文件读写
  2. Sound Mixer Fader
  3. Promise 的使用
  4. 【错误记录】Visual Studio 编译 C++ 代码报错 ( To disable deprecation, use _CRT_SECURE_NO_WARNINGS. )
  5. 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel
  6. 【C++】45.尽量不要在构造函数中调用函数或开启线程
  7. 模型参数优化(二):粒子群优化
  8. 临床研究数据分析的6种常用方法
  9. android产品设计,Android产品设计
  10. hdu2019——数列有序解题报告
  11. apicloud使用指南
  12. 【2018.3.17】模拟赛之一-ssl2574jzoj1368 无限序列【斐波那契数列】
  13. 【VBS】网页脚本的放置位置与载入时机
  14. js-document对象
  15. C++自学14:关系运算符(bool/std::boolalpha)
  16. c语言 乘号 指针 避免,C语言指针篇(一)指针与指针变量
  17. 韩顺平Java基础入门笔记-第一章
  18. linux如何自定义桌面,如何自定义 GNOME 3 桌面? | Linux 中国
  19. MP3 文件格式解析
  20. 4个步骤让你空手套白狼,零投资净赚百万!颠覆传统的商业思维!

热门文章

  1. 新电脑主机声音好大为什么啊
  2. 8年磨一剑,持安科技2023年度产品发布会报名通道正式开启!
  3. Linux性能优化——DNS解析
  4. 长城证券分析报告(0607)
  5. 「更新方法」iOS16.4更新方法及固件下载
  6. 删除手机自带程序最有效最简单的方法(无须root)
  7. lol最克制诺手的英雄_LOL中能够“吊打”诺手的五大英雄,最后一位简直是诺手的天敌!...
  8. 钢材现货报价继续下跌
  9. springboot整合之统一异常处理
  10. Stata17安装包下载及安装教程