http://codeforces.com/problemset/problem/176/B
这题比赛的时候角度完全想错了。。。当时我的想法是转化成:“n+p*len=m个(1到len-1)的数相加"的方法数,p是圈数,复杂度10^8。
真的想不到这个dp方法。搬运其他大佬的解法:
1.首先原串(即以0号字母开头的)个数为1,其他种类串为0。
2.第一次变化之后,原串个数即为0,其他串个数为1(由原串变过去,但原串变不成自己)
3.第二次变化,原串个数为len-1(由其他串变过来),其他串变为len-2 (由原串 和 除自己外的其他串变过来, 0+len-2,原串为0,故为len-2)
所以我们总结出的规律,假设 dp[i][0]为原串,dp[i][1]为其他串
dp[i][0]=(len-1)*dp[i-1][1],
dp[i][1]=dp[i-1][0]+(len-2)*dp[i-1][1].