state:
dp[i][j] - how many ways to reach point j with i steps
transition:
dp[i][j]+=dp[i-1][k], 1<=k<=26
do this on both when p[k][0]==j and when p[k][1]==j
/* UVas */ /*****************************************************************************/ char t0, t1, tx; int n, m; int p[27][3]; int d[31][27]; int main(void) { while (cin>>n) { for (int i=1; i<=n; i++) { cin>>t0>>t0>>t1>>tx; p[i][0]=t0-'@'; p[i][1]=t1-'@'; p[i][2]=tx=='x'?1:0; } cin>>m; memset(d, 0, sizeof(d)); d[0][1]=1; for (int i=1; i<=m; i++) { for (int j=1; j<=n; j++) { for (int k=1; k<=n; k++) { if (p[k][0]==j) { d[i][j]+=d[i-1][k]; } if (p[k][1]==j) { d[i][j]+=d[i-1][k]; } } } } int r=0; for (int i=1; i<=n; i++) { r+=d[m][i]*p[i][2]; } cout<<r<<endl; } return 0; } /*****************************************************************************/
No comments :
Post a Comment