题目

Description
Flowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种,
圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗
粒的序列,如果存在1<=i<j<=2m,满足以下条件:
1)i 为偶数,j 为奇数
2)第i 颗友谊颗粒和第j 颗友谊颗粒同为圆粒或同为皱粒
3)第i 颗友谊颗粒和第j 颗友谊颗粒都还没有被使用过
那么,就可以使用这两颗友谊颗粒,然后提升一次LV.
定义一个友谊颗粒的序列为高效的,当且仅当尽可能多的提升LV 后,序列
上剩余的友谊颗粒数量不超过2n。
现在,Flowey 想知道,长度为2m 的友谊颗粒序列,有多少个不同的序列是
高效的?
定义两个友谊颗粒序列是不同的,当且仅当存在1<=i<=2m,第i 颗友谊颗粒在
一个序列中为圆粒,而在另一个中为皱粒.
由于答案可能很大,你只需要求出答案对p 取模的结果.

Input
从friend.in 读入数据
为一行三个正整数,n,m,p

Output
输出到friend.out 中
为一行一个非负整数,代表答案对p 取模的结果

Sample Input
输入1:
2 3 233
输入2:
223 514 514223
输入3:
50 25 514223

Sample Output
输出1:
56
输出2:
488817
输出3:
140210

Data Constraint
对于30%的数据,满足n<=10,m<=10
对于60%的数据,满足n<=300,m<=300
对于100%的数据,满足1<=n<=3000,1<=m<=3000,2<=p<=1000000007

思路

考虑暴力,设F[i][j][k]为前i组,剩j个0,k个1
假设一开始我们有n个可匹配的偶数位置(可0可1),我们会发现我们转移过程中可供匹配的位置数量恒为n
那么修改一下状态,F[i][j]表示前i组有j个0,那么就有n-j个1
但是这样会算重,一个合法方案可能有很多种分配n个可匹配的位置的01的方案
注意到一定有一种方案满足某个时刻可匹配的位置用完了
再加一维0/1表示转移过程中是否经过j=0

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,p;
ll f[3100][3100][2];
int main()
{freopen("friend.in","r",stdin);freopen("friend.out","w",stdout);scanf("%d%d%d",&n,&m,&p);for(int j=1;j<=n;j++)f[0][j][0]=1;f[0][0][1]=1;    for(int i=1;i<=m;i++){for(int j=0;j<=n;j++){f[i][j][0]=f[i][j][1]=0;if(j==0) f[i][j][1]+=f[i-1][j+1][0];if(j>0) f[i][j][1]+=f[i-1][j][1]+f[i-1][j-1][1];if(j==1) f[i][j][1]+=f[i-1][j][0]+f[i-1][j-1][0];if(j>1) f[i][j][0]+=f[i-1][j][0]+f[i-1][j-1][0];if(j<n) {f[i][j][1]+=f[i-1][j][1]+f[i-1][j+1][1];f[i][j][0]+=f[i-1][j][0]+f[i-1][j+1][0];}f[i][j][0]%=p;f[i][j][1]%=p;}f[i][0][0]=0;}ll ans=0;for(int i=0;i<=n;i++) ans=(ans+f[m][i][1])%p;printf("%lld",ans);                 return 0;
}

【JZOJ 杂题选讲】友谊相关推荐

  1. [JZOJ]杂题选讲

    目录 1.aplusb 2.可见点数 3.射击 4.创世纪 5.长方形 6.连通块 7.Ede的新背包问题 8.模板串 9.Clock Sequence 10.硬币游戏 1.aplusb Descri ...

  2. 【JZOJ 杂题选讲】【UER #8】打雪仗

    题目 通信题 A知道一个长为2n的01串,B知道n个位置 AB之间可以互相发送01字符,每个人所发不超m个 让AB互相通信,使B得到n个位置的具体值 n=1000 m=1350 子问题:m=1600 ...

  3. 【JZOJ 杂题选讲】北大集训2019 n门问题

    题目 思路 首先我们考虑如何计算猜奖者所认为的概率 假设现在还有n扇门,第i扇有奖的概率是p[i]. 猜奖者选了第x扇门,主持人打开了第y扇门: 1.有p[x]的概率第x扇门就是有奖的,经过这次操作, ...

  4. 20190509杂题选讲

    这次杂题选讲好多思维题神仙题啊= =顺便学了波线段树上二分= = Normal 题目大意戳这 CF1083C CDW讲的神仙题*1 题解戳这 AGC002E 我讲的题,是个人写的程序都比我写的程序跑得 ...

  5. [统计学笔记] 统计学计算题选讲(精华)

    统计学计算题选讲 第 1 题 某班级学生物理课程考试成绩分别为:              68  89  88  84  86  87  75  73  72  68              75 ...

  6. CSP难度的经典题目/有趣的思维题选讲(一)

    引言 这里讲到的难题是一部分非常典型的题目,但并不是所有.因此这并非是一个全面的知识列表,而只适合提高组同学用来提升能力和拓展视野. 这篇文章在很多地方讲述的不够详细和严谨,因为它的作用并非是题解,而 ...

  7. c语言兔子洞,数据结构水题选讲 - osc_y08db3kb的个人空间 - OSCHINA - 中文开源技术交流社区...

    [Ynoi2011]ODT \(O(nlog^2n)\) 的做法非常显然 直接把树重链剖分一下,每个点维护轻儿子的平衡树就行 但是这题 \(1e6\) 的数据范围使得 \(O(nlog^2n)\) 没 ...

  8. 2019 B站校招编程题选讲

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的协议 ping bilibili没有用到TCP协议, DNS是域名解析,ICMP就是pin ...

  9. 【算法练习】杂题混讲一:Acwing + 蓝桥杯练习

    一.牛的学术圈Ⅰ(二分) 如果不考虑参数L的影响,那就是一个纯纯的二分答案,问题在于如何处理参数L?,仔细读题,题目说了总共至多引用L篇,每篇论文至多引用1次,至多的意思是说可以引用也可以不引用. 那 ...

最新文章

  1. html js 添加数据类型,js数据类型判断和转换
  2. 调用预训练好的XLnet词向量
  3. 服务器文件协议,文件服务器协议
  4. datetime模块日期转换和列表sorted排序
  5. 返回表达式列表中最小值least(exp1,exp2,exp3,……,expn)
  6. mantis apache mysql_Debian下mysql5+php5+apache2+mantis服务器升级
  7. 自己动手做聊天机器人 一-涉及知识【转】
  8. MyEclipse2014 优化设置
  9. opencv打开的图片应用于nn.Conv2d()(一)(H, W, C)转为 (C, H, W)
  10. 《推荐系统笔记(十四)》矩阵分解(MF)以及基于矩阵分解的topN推荐
  11. 如何对CentOS FTP服务配置 - 51CTO.COM
  12. 设置c++程序的堆栈空间解决栈溢出问题
  13. sqlserver基本增删查语句
  14. 华为鸿蒙状态栏,华为手机状态栏图标都代表什么
  15. python文本自动伪原创_现在有哪些好用的伪原创工具?
  16. Extjs实现角色权限流控制,对fieldset,checkbox的动态控制
  17. 华为手机pc模式机型_哪些手机型号外接便携显示器能实现PC电脑模式
  18. 支付宝扫码转银行卡技术/隐藏部分卡号
  19. java写triangle_Java - 制作Triangle类
  20. JAVA兔子繁衍_Java 编程经典案例之兔子繁殖迭代问题

热门文章

  1. javaFx实现毛笔笔锋效果,基于bezier曲线
  2. Qt+C++窗体界面中英文多语言切换
  3. java隋唐系列游戏下载,隋唐大业全面战争
  4. Redis-基础学习
  5. 小账本软件设计之数据库设计模式构建
  6. c++报错:lvalue required as left operand of assignment
  7. windows用cmd命令进入文件夹目录
  8. (转)站长十个害怕和担心的事情
  9. IT行业职位类别介绍
  10. 【实验练习】请建立简单线性回归模型,实现依据身高预测以为女性的体重,并对模型进行评估和优化。