AtCoder Grand Contest 013D: Piling Up 题解
题意简化:
[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 题解相关推荐
- 【每日亿题#12】AtCoder Grand Contest 021 (A ~ F)全部题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 AtCoder Grand Contest 021 题解 A. Digit Sum 2 B. ...
- AtCoder题解——AtCoder Grand Contest 048——A - atcoder < S
题目相关 题目链接 AtCoder Grand Contest 048 A 题,https://atcoder.jp/contests/agc048/tasks/agc048_a. Problem S ...
- AtCoder题解 —— AtCoder Grand Contest 050 —— B - Three Coins —— 动态规划
题目相关 题目链接 AtCoder Grand Contest 050 B 题,https://atcoder.jp/contests/agc050/tasks/agc050_b. Problem S ...
- AtCoder Grand Contest 008: Contiguous Repainting(思维)
Contiguous Repainting 时间限制: 2 Sec 内存限制: 256 MB 提交: 69 解决: 22 [提交][状态][讨论版][命题人:admin] 题目描述 There a ...
- AtCoder Grand Contest 017
AtCoder Grand Contest 017 A - Biscuits 有\(n\)个数,问有多少个集合的数的和模\(2\)余\(P\). 随便\(dp\)一下就好了. #include< ...
- AtCoder Beginner Contest 246 A~E 题解 Bishop 2
AtCoder Beginner Contest 246 A~E 题解 A Four Points 题意 给你矩形的三个顶点,输出剩下那个 思路 把横坐标和纵坐标分开,必会存在两个相同的数,横纵坐标就 ...
- [atcoder]AtCoder Grand Contest 027题解
[题目链接] https://agc027.contest.atcoder.jp/ A [题解] 题意: 是把xxx个糖果分给nnn个人,一个人如果恰好分到aia_{i}ai个糖果就会高兴.求最多使 ...
- AtCoder Grand Contest 021完整题解
提示:如果公式挂了请多刷新几次,MathJex的公式渲染速度并不是那么理想. 总的来说,还是自己太弱了啊.只做了T1,还WA了两发.今天还有一场CodeForces,晚上0点qwq... 题解还是要好 ...
- AtCoder Grand Contest 013 题解
A - Sorted Arrays 贪心,看看不下降和不上升最长能到哪,直接转移过去即可. 1 //waz 2 #include <bits/stdc++.h> 3 4 using nam ...
最新文章
- SpringMVC之context-dispatcher.xml,了解基本的控制器
- EasyUI中layout布局的简单使用
- 页面加载时间如何影响你的收益?
- python循环中的else_python 循环中else的简单示例
- 插入排序--Java
- MySQL免安装版安装
- hud抬头显示器哪个好_汽车加装HUD抬头显示实用吗?不低头就能获取数据
- 《数字电子技术基础》3.3 CMOS门电路(上)
- Python删除字符串中的符号
- his软件测试文档,HIS系统各子系统功能描述
- Cocos2d-x游戏引擎实战开发炸弹超人项目教程 全套下载 1至6课
- 知识图谱-实体消歧(语义消歧)
- 未检测到正确安装的网络适配器_网络适配器图标出现黄色感叹号的解决办法
- [maya学习笔记(18)] 粒子系统 - 落叶纷飞
- 怎样用c语言写高速超速罚款标准,如何做到科一满分一把过?超速扣分题必须掌握!...
- 以分割栅格为例实现FME模板的方案优化
- 【Gerrit使用教程详解】
- 基于Qt的聊天软件设计实现手把手教学——高仿QQUI设计(一)
- STM32驱动1.44TFT显示屏
- Zero-sho原先的升级版:hourglass网络:U-Net