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];

View Code
#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;
}





posted @ 2011-10-26 09:34  104_gogo  阅读(139)  评论(0编辑  收藏  举报