解题思路:
动态规划计数问题。
动态规划求解步骤:
第一步:确定状态。
①最后一步:也就是问题的最后一步,这里的最后一步是走到n
②子问题:本题中可以走1~2步,所以最后一步前状态有两个n-1,n-2
第二步:状态转移方程。
状态出来了转移方程就出来了是f[n] = f[n]+f[n-1] ,f[n] = f[n]+f[n-2]
第三步:初始条件,边界情况。
初始条件:往往都是通过转移方程算不出来的,而可以看的出来的。这里是位置1时移动的方法只有1种。
边界情况:列表不要越界,还有题中的陷阱。
第四步:计算顺序。
根据转移方程f[n] = f[n]+f[n-1],算f[n]时f[n-1]必须算过了所以可以知道是从小到大的顺序。
理清楚之后就可以写代码了。
参考代码:
n,m = map(int,input().split()) xl = list(map(int,input().split())) dp = [0 for _ in range(n+1)] dp[1] = 1 #初始状态 for i in range(n+1): #计算顺序 for j in [1,2]: if i-j>=1 and xl.count(i) == 0: #边界情况 dp[i] = dp[i-j] + dp[i] #转移方程 print(dp[n])
0.0分
4 人评分
A+B for Input-Output Practice (VII) (C++代码)浏览:643 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2098 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:689 |
校门外的树 (C语言代码)浏览:733 |
IP判断 (C语言代码)浏览:819 |
数对 (C语言代码)浏览:762 |
sizeof的大作用 (C语言代码)浏览:1590 |
矩形面积交 (C++代码)浏览:1204 |
循环入门练习6 (C语言代码)浏览:1058 |