题意简化:

[luogu] Piling Up

一开始有n个颜色为黑白的球,但不知道黑白色分别有多少,m次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色序列,求颜色序列有多少种
n,m小于等于3000 答案对1e9+7取膜

一些乱七八糟的东西

这个题还是 Power_Leo101 同学教我做的, 自己太弱了,完全不会
这是菊队ppt里推荐的题, 这个学期过了, 学长们就毕业了, 菊队也不再会给我们讲课了
虽然陈菊开学长讲课的画风毒瘤, ppt毒瘤

题解

对于每一次操作,其实是可以看成一次染色的,因为总数总是不变,而颜色却会变化
所以对于每一次染色,即有四种情况: 嘿嘿 黑黑 , 白白, 黑白,白黑
按照常规思路:
我们不妨设 f[i][j] 表示当前进行第i次操作, 还剩下 j 个白球 (其实颜色没影响)
所以对于每一个当前状态则是可以有之前的状态,通过上面列举的四种操作得到

if (j>0)f[i][j] = f[i][j] + f[i-1][j] + f[i-1][j-1]; //是白白和白黑两种情况if (j<n)f[i][j] = f[i][j] + f[i-1][j] + f[i-1][j+1]; //是黑白和黑黑两种情况

但是

这连样例都跑不过!!!

没想到吧

这是为什么呢???

再通过观察, 可以发现题目要求的是取出的球的不同顺序方案,而在我们的处理中有了很多重复的
因为它要求的只是顺序, 还在序列中的黑白球的数量并不重要!
所以求出所有的方案数之后,我们只需将 n=n-1 再跑一遍
然后用第一次的答案减去第二次的答案,就是真正的答案了. (想想为什么)

代码 (没有注释,不要枪毙我)

#include<bits/stdc++.h>
using namespace std;
#define re register
#define ll long long
#define get getchar()
#define in inline
#define db double
in int read()
{int t=0; char ch=get;while(ch<'0' || ch>'9') ch=get;while (ch<='9' && ch>='0') t=t*10+ch-'0', ch=get;return t;
}
const int _=3010;
const int mod=1e9+7;
ll n,m,f[_][_];
int main()
{n=read(),m=read();for (re int i=0;i<=n;i++)f[0][i]=1;ll ans=0;for (re int i=1; i<=m; i++)for (re int j=0; j<=n; j++){if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1]+f[i-1][j])%mod;if(j<n)f[i][j]=(f[i][j]+f[i-1][j+1]+f[i-1][j])%mod;}for (re int i=0; i<=n; i++) ans=(ans+f[m][i])%mod;ll ans1=0;memset(f,0,sizeof(f));for (re int i=0;i<=n-1;i++)f[0][i]=1;for (re int i=1; i<=m; i++)for (re int j=0; j<=n-1; j++){if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1]+f[i-1][j])%mod;if(j<n-1)f[i][j]=(f[i][j]+f[i-1][j+1]+f[i-1][j])%mod;}for (re int i=0; i<=n-1; i++) ans1=(ans1+f[m][i])%mod;cout<<((ans-ans1)+mod)%mod;return 0;
}

嗯, 就这样,这是蒟蒻的第一篇正式题解了

转载于:https://www.cnblogs.com/yzhx/p/10611041.html

AtCoder Grand Contest 013D: Piling Up 题解相关推荐

  1. 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...

  2. AtCoder题解——AtCoder Grand Contest 048——A - atcoder < S

    题目相关 题目链接 AtCoder Grand Contest 048 A 题,https://atcoder.jp/contests/agc048/tasks/agc048_a. Problem S ...

  3. AtCoder题解 —— AtCoder Grand Contest 050 —— B - Three Coins —— 动态规划

    题目相关 题目链接 AtCoder Grand Contest 050 B 题,https://atcoder.jp/contests/agc050/tasks/agc050_b. Problem S ...

  4. AtCoder Grand Contest 008: Contiguous Repainting(思维)

    Contiguous Repainting 时间限制: 2 Sec  内存限制: 256 MB 提交: 69  解决: 22 [提交][状态][讨论版][命题人:admin] 题目描述 There a ...

  5. AtCoder Grand Contest 017

    AtCoder Grand Contest 017 A - Biscuits 有\(n\)个数,问有多少个集合的数的和模\(2\)余\(P\). 随便\(dp\)一下就好了. #include< ...

  6. AtCoder Beginner Contest 246 A~E 题解 Bishop 2

    AtCoder Beginner Contest 246 A~E 题解 A Four Points 题意 给你矩形的三个顶点,输出剩下那个 思路 把横坐标和纵坐标分开,必会存在两个相同的数,横纵坐标就 ...

  7. [atcoder]AtCoder Grand Contest 027题解

    [题目链接] https://agc027.contest.atcoder.jp/ A [题解] 题意: 是把xxx个糖果分给nnn个人,一个人如果恰好分到aia_{i}ai​个糖果就会高兴.求最多使 ...

  8. AtCoder Grand Contest 021完整题解

    提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...

  9. AtCoder Grand Contest 013 题解

    A - Sorted Arrays 贪心,看看不下降和不上升最长能到哪,直接转移过去即可. 1 //waz 2 #include <bits/stdc++.h> 3 4 using nam ...

最新文章

  1. SpringMVC之context-dispatcher.xml,了解基本的控制器
  2. EasyUI中layout布局的简单使用
  3. 页面加载时间如何影响你的收益?
  4. python循环中的else_python 循环中else的简单示例
  5. 插入排序--Java
  6. MySQL免安装版安装
  7. hud抬头显示器哪个好_汽车加装HUD抬头显示实用吗?不低头就能获取数据
  8. 《数字电子技术基础》3.3 CMOS门电路(上)
  9. Python删除字符串中的符号
  10. his软件测试文档,HIS系统各子系统功能描述
  11. Cocos2d-x游戏引擎实战开发炸弹超人项目教程 全套下载 1至6课
  12. 知识图谱-实体消歧(语义消歧)
  13. 未检测到正确安装的网络适配器_网络适配器图标出现黄色感叹号的解决办法
  14. [maya学习笔记(18)] 粒子系统 - 落叶纷飞
  15. 怎样用c语言写高速超速罚款标准,如何做到科一满分一把过?超速扣分题必须掌握!...
  16. 以分割栅格为例实现FME模板的方案优化
  17. 【Gerrit使用教程详解】
  18. 基于Qt的聊天软件设计实现手把手教学——高仿QQUI设计(一)
  19. STM32驱动1.44TFT显示屏
  20. Zero-sho原先的升级版:hourglass网络:U-Net

热门文章

  1. 爬取小说 spider
  2. Socket.IO 客户端 API IO
  3. 工作中涉及运维知识点的汇总
  4. Elasticsearch 性能调优
  5. 网络流24题之魔术球问题
  6. HTML基础:文本列表实例2(9)
  7. bzoj 3209 数位DP+欧拉定理
  8. 课后练习----实现窗口的切换
  9. javascript常用验证大全
  10. Python全栈工程师(Python3 所有基础内容 0-0)