poj 2537 Tight words dp
每次看到动态转移方程就瞬间顿悟,哎,伤不起啊~
定义dp[i][j],第i个数字是j
dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1];
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h>
int main()
{
int k,n,i,j;
double dp[105][15],a,b;
while (scanf("%d%d",&k,&n)!=EOF)
{
if(k==0)
{
printf("100.00000\n");
continue;
}
for (j=0;j<=10;j++)dp[1][j]=1;
for (i=2;i<=n;i++)
{
for (j=0;j<=k;j++)
{
if(j==0)dp[i][j]=dp[i-1][j]+dp[i-1][j+1];
else if(j==k)dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
else dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[i-1][j+1];
}
}
a=0,b=1;
for (j=0;j<=k;j++)a+=dp[n][j];
for (i=1;i<=n;i++)b*=(k+1);
printf("%.5lf\n",(a/b)*100);
}
return 0;
}