题面:https://codeforces.com/problemset/problem/1498/C
大致题意:给定n块板子,在第一块板子的左方发射一个初始值为D(k)的粒子,规则是粒子每穿过一个板子,自身D(k)值不变,若k>1则会分裂出一个新的D(k-1)的粒子,方向相反,求产生的粒子总数
题解:很明显是要用动态规划,但状态转移方程有点难想,若用dp[i][k][j]表示D(k)粒子从j(1表示从左向右,0表示从右向左)方向撞向第i个板子所产生的粒子总数,则dp[i][k][1]=dp[i-1][k-1][0]+dp[i+1][k][1],dp[i][k][0]=dp[i+1][k-1][1]+dp[i-1][k][0];dp[i][1][j]都初始化成1(注意首尾板子要特判)
使用记忆化dfs时间复杂度为O(2nk)
1 |
|