连续数列
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte Total Submit:223 Accepted:62 Description
给你P个数字1,2,3,...,P
你可以把这些数字组成长度为L的数字串
但是这个串不能出现有连续K个或者K个以上的数字1。
(1<=P<=9 1<L<=30 1<K<=L)
比如,P=2 L=3 K=2有如下情况
1 2 1
1 2 2
2 1 2
2 2 1
2 2 2
共有5种
再比如 P=3 L=3 K=3有如下情况
1 1 2 2 1 1 3 1 1
1 1 3 2 1 2 3 1 2
1 2 1 2 1 3 3 1 3
1 2 2 2 2 1 3 2 1
1 2 3 2 2 2 3 2 2
1 3 1 2 2 3 3 2 3
1 3 2 2 3 1 3 3 1
1 3 3 2 3 2 3 3 2
2 3 3 3 3 3
有26种
Input
现在输入P L K
Output
给出答案数
Sample Input
3 3 3
Sample Output
26
Hint
需要高精度
思路:
考虑最后一位是不是1的情况~
1 memset(dp,0,sizeof(dp)); 2 dp[0][0]=1; 3 for(i=1;i<=L;i++) 4 for(j=0;j<K&&j<=i;j++){ 5 if(j==0)//最后一个字符不是1 6 for(k=0;k<K;k++) 7 dp[i][j]+=dp[i-1][k]*(P-1); 8 else//最后一个字符是1 9 dp[i][j]+=dp[i-1][j-1]; 10 }
但是会溢出,需要用高精度~