盒子里有n块砖,每块的颜色可能为蓝色或红色。
执行m次三步操做:
1.从盒子里随便拿走一块砖
2.放入一块蓝砖和红砖到盒子里
3.从盒子里随便拿走一块砖spa
给定n,m
问拿出来的砖,可能有多少种不一样的颜色序列。class
n,m<=3000统计
容易想到一个dp,
设f[i][j]表示已经执行了i次的操做,而后目前盒子里有j块蓝砖,和n-j块红砖。
共有四种转移,分别是一次操做拿走的砖头为红红、红蓝、蓝红、蓝蓝。
边界为f[0][0..n]=1math
而后就会发现算重了,
这是由于不一样的颜色序列可能会有不一样的起始蓝砖数。颜色
那么咱们对于一个颜色序列,咱们只在它的起始蓝砖数最小的场合统计。
对于最小的起始蓝砖数,m次操做过程当中必定有一时刻蓝砖数为0。
由于若是没有,说明起始蓝砖数还能够减去整个过程当中的最小蓝砖数。
而后只要给f设多一维0/1表示,执行了i次操做后,有没有通过蓝砖数为0的时刻。
答案就是\(\sum f[m][i][0]\)