定义dp[i]为长度为i的方案数量,很容易推出状态转移,当前的状态为i减去一黑一白的状态+1+当前状态减去(k+1)即k+一个白色
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
ll dp[111];
int l,k;
scanf("%d%d",&l,&k);
dp[0]=0;
for(int i=1;i<=l;i++)
{
dp[i]=dp[i-1];
ll k1,k2;
if(i-1==0) k1=1;
else k1=0;
if(i-k==0) k2=1;
else k2=0;
if(i-2>=0) k1+=dp[i-2]+1;
if(i-(k+1)>=0) k2+=dp[i-(k+1)]+1;
dp[i]=max(dp[i],k1+k2);
}
printf("%lld\n",dp[l]);
return 0;
}