AT2370 Piling Up
https://www.luogu.org/jump/atcoder/2370
题解
答案不是\(2^{2m}\)因为每轮的第一次取球可能会不够。
我们可以设\(dp[i][j]\)表示到了第\(i\)轮,当前白球有\(j\)个的方案数。
转移的话枚举下一次拿球的方案。
白白:\((i,j)->(i+1,j-1)\)
黑黑:\((i,j)->(i+1,j+1)\)
白黑:\((i,j)->(i+1,j)\)
黑白:\((i,j)->(i+1,j)\)
把每个状态放在二维平面上的话,我们其实是在统计本质不同的折线个数。
但是这样会算重。
所以我们需要让每条折线强制碰到底部。
那么我们在状态中记录一下是否碰到底部就行了。
代码
#include<bits/stdc++.h>
#define N 3002
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll dp[N][N][2];
int n,m;
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
int main(){
n=rd();m=rd();
for(int i=1;i<=n;++i)dp[0][i][0]=1;
dp[0][0][1]=1;
for(int i=1;i<=m;++i){
for(int j=0;j<=n;++j)
for(int k=0;k<2;++k)if(dp[i-1][j][k]){
if(j){
MOD(dp[i][j-1][k|(j==1)]+=dp[i-1][j][k]);
MOD(dp[i][j][k|(j==1)]+=dp[i-1][j][k]);
}
if(j<n){
MOD(dp[i][j+1][k]+=dp[i-1][j][k]);
MOD(dp[i][j][k]+=dp[i-1][j][k]);
}
}
}
ll ans=0;
for(int i=0;i<=n;++i)MOD(ans+=dp[m][i][1]);
cout<<ans;
return 0;
}
AT2370 Piling Up的更多相关文章
- 【题解】At2370 Piling Up
[题解]At2370 Piling Up \[ dp(i,j,0/1) \\ 正在进行i项操作并且此时黑球剩下j个,黑球[0/1]数量曾经到过0 \\ 为什么加第二位,判重.怎么想到的? \] 非常神 ...
- 【题解】Counting D-sets(容斥+欧拉定理)
[题解]Counting D-sets(容斥+欧拉定理) 没时间写先咕咕咕. vjCodeChef - CNTDSETS 就是容斥,只是难了一二三四五\(\dots \inf\)点 题目大意: 给定你 ...
- 一句话题解&&总结
CF79D Password: 差分.两点取反,本质是匹配!最短路+状压DP 取反是套路,匹配是发现可以把操作进行目的化和阶段化,从而第二次转化问题. 且匹配不会影响别的位置答案 sequence 计 ...
- 【agc013d】Piling Up(动态规划)
[agc013d]Piling Up(动态规划) 题面 atcoder 洛谷 有\(n\)个球,颜色为黑白中的一种,初始时颜色任意. 进行\(m\)次操作,每次操作都是先拿出一个求,再放进黑白各一个, ...
- CodeForces - 50A Domino piling (贪心+递归)
CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...
- AtCoder Grand Contest 013D: Piling Up 题解
题意简化: [luogu] Piling Up 一开始有n个颜色为黑白的球,但不知道黑白色分别有多少,m次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色 ...
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project demo: Fatal error com piling: 无效的标记: -parameters
背景:本项目使用JDK1.8 编译maven工程的时候出现如下错误: Failed to execute goal org.apache.maven.plugins:maven-compiler-pl ...
- codeforces水题100道 第三题 Codeforces Beta Round #47 A. Domino piling (math)
题目链接:http://www.codeforces.com/problemset/problem/50/A题意:一个NxM的举行中最多能放多少个1x2的矩形.C++代码: #include < ...
- C - Domino piling
Problem description You are given a rectangular board of M × N squares. Also you are given an unlimi ...
随机推荐
- linux 通配符与正则表达式
linux通配符和三剑客(grep.awk.sed)正则表达式是不一样的 通配符一般用户命令行bash环境,而linux正则表达式用于awk.grep.sed
- Spring对Jdbc的封装——JdbcTemplate的使用
链接:https://pan.baidu.com/s/15luDElW4oeEaP0nvEQ_40w 提取码:i2r1 JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于 ...
- 【Python】循环结构中的else
else在循环结构中,只有循环正常结束后才执行else,如果使用break跳出了循环,不会执行else for i in range(0,10): print(i)else: print(" ...
- 思维体操: HDU1287破译密码
破译密码 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 好用的 Puppeteer 辅助工具 Puppeteer Recorder
Puppeteer Puppeteer 是一个Node库,它提供了一个高级API来控制DevTools协议上的Chrome或Chromium,常用于爬虫.自动化测试等,你在浏览器手动完成的大多数事情都 ...
- Composer 的自动加载机制
Composer 的自动加载机制 Composer 提供了四种自动加载方式,分别是 PSR-0.PSR-4.生成 classmap 以及之间包含 files. PSR-0 方式 PSR-0 方式要求目 ...
- Desert King(01分数规划问题)(最优斜率生成树)
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions:33847 Accepted: 9208 Descr ...
- Redis主从架构核心原理
Redis-Cluster工作原理: redis集群内置了16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果 ...
- 剑指offer-用两个栈来实现一个队列-队列与栈-python
用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:使用两个栈,stackA 用来接收node stackB 用来接收 stackA 的出栈 # -*- cod ...
- python学习笔记(5)
第七章 模式匹配和正则表达式 1.不用正则表达式来查找文本模式 #对于这样的一个文本查找:3个数字,一个短横线,3个数字,4个端横线,然后再是4个数字,如:415-555-4242def isPh ...