1.1递推

知识点

递推是将一个大问题不断拆分成本质相同的子问题
递推的核心在于递推式,即如何用已知数据更新新数据
递推可以正推,也可以逆推

如何解题

解题的关键是找到转移式,f数组下标含义
一种可行的确定f数组的方法:情景分析法
假如你要向另一个人汇报,你汇报的重点(尽可能的少)就是下标与含义
如果无法写出转移式,尝试加(或减)一维
推导转移式方法:
分情况讨论,将大问题分成两个(或多个)情况下的子问题,最终将这些情况下的结果加到一起
注意:有时因题目变化需要额外加上特判

例题

例题3:传球游戏

  • 要点:
    注意循环嵌套的顺序,先枚举j,即经过人数,嵌套枚举i,即到第i人手中
    原因:由递推式可知,每次更新需要用到 f[i-1][j-1] 和 f[i+1][j-1],所以要让每个 f[i][j-1] 有初始值,即每次有一个j,都要对j列上的所有数初始化,否则计算不能成功
    所以要这样写:
    f[1][0]=1;
	for(int j=1;j<=m;j++){//枚举经过人数 
		for(int i=1;i<=n;i++){//枚举人 
			if(i==1) f[i][j]=f[n][j-1]+f[i+1][j-1];
			else if(i==n) f[i][j]=f[1][j-1]+f[i-1][j-1];
			else f[i][j]=f[i-1][j-1]+f[i+1][j-1];
		}
	} 
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值