链接:点击打开链接
题意:问一个由H和T两种字母组成的长度为n的字符串,至少含有k个连续H的字符串种数
代码:
package main;
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static int n;
public static BigInteger dp[][]=new BigInteger[105][2];
public static BigInteger cal(int u) {
int i; //dp[i][0]表示第i位是H
BigInteger sum; //dp[i][1]表示第i位是T
dp[0][0]=BigInteger.valueOf(0); //思路如下
dp[0][1]=BigInteger.valueOf(1); //http://blog.csdn.net/stay_accept/article/details/51277755
for(i=1;i<=n;i++){
sum=dp[i-1][0].add(dp[i-1][1]);
dp[i][1]=sum;
if(i<=u)
dp[i][0]=sum;
else if(i==u+1)
dp[i][0]=sum.subtract(BigInteger.valueOf(1));
else
dp[i][0]=sum.subtract(dp[i-u-1][1]);
}
return dp[n][0].add(dp[n][1]);
} //因为长度是100并且没有取余
public static void main(String[] args) { //因此用java大数
int k;
Scanner in=new Scanner(System.in);
while(in.hasNext()){
n=in.nextInt();
k=in.nextInt();
System.out.println(cal(n).subtract(cal(k-1)));
}
}
}