一般思路的dp是用f(i,j,0)表示前i位最后有j个1的方案数,用f(i,j,1)表示前j位最后有j个2的方案数,j都是大于等于1的,然后比较容易转移. 但这题卡内存,就只能用f(i,j)表示前i位最后有j个1的方案数,这里j大于等于0. 然后转移就略麻烦,自己看代码领会一下吧. 也可以看成是滚动数组优化. #include<cstdio> using namespace std; #define MOD 1000000007 int n,lim[2]; int f[50010][310],…