您现在的位置是:主页 > news > 资海集团网站建设推广游戏赚钱的平台

资海集团网站建设推广游戏赚钱的平台

admin2025/7/5 12:23:40news

简介资海集团网站建设,推广游戏赚钱的平台,wordpress level,大连网站建设案例按照动态规划解题顺序,首先,我们要定义状态表示,这里根据题意f[i]就应该表示有i个台阶方案总数 第二步就是 确认状态转移方程,画图分析 所以实际上f[i] 也就是说i个台阶的方案数实际上就是第i-1个格子的方案数第i-2个格子的方案数…

资海集团网站建设,推广游戏赚钱的平台,wordpress level,大连网站建设案例按照动态规划解题顺序,首先,我们要定义状态表示,这里根据题意f[i]就应该表示有i个台阶方案总数 第二步就是 确认状态转移方程,画图分析 所以实际上f[i] 也就是说i个台阶的方案数实际上就是第i-1个格子的方案数第i-2个格子的方案数…

按照动态规划解题顺序,首先,我们要定义状态表示,这里根据题意f[i]就应该表示有i个台阶方案总数

第二步就是 确认状态转移方程,画图分析

所以实际上f[i] 也就是说i个台阶的方案数实际上就是第i-1个格子的方案数+第i-2个格子的方案数+第i-3个格子的方案数,所以状态转移方程就是f[i]=f[i-1]+f[i-2]+f[i-3]

下一步就是我们的初始化,我们的初始化要遵循两个要求,1是保证填表正确,2是不越界

如果我们从0,1,2开始填的话下标会越界 所以我们就把0,1,2三个格子初始化,f[0]是1还是0呢?f[0]就是没有台阶,我们是算一种方案还是算0种方案呢,我们先不管他,我们先看1 一个台阶上的方案只有一个,f[1]  = 1   再看2  2个台阶上的方案无非就是一个格子一个格子上 和两个格子一起上,方案是2 个 f[2] = 2  我们再看一下3,3的台阶上的方案如图,很明显是四个,所以我们f[0]应该填1

下一步就是确认填表顺序了,我们应该从第三个开始填,从左到右

废话不说我们来实现一下我们的代码

#include <iostream>
using namespace std;
typedef long long LL;
const int N = 600;
LL f[N];
int main()
{f[0] = 1;f[1] = 1;f[2] = 2;LL n; cin >> n;for(LL i = 3;i<=n;i++){f[i] = f[i-1]+f[i-2]+f[i-3];}cout << f[n] << endl;}

代码很简单,和斐波那契数列特别像,也可以说它是一个斐波那契模型

但是!我们可以对空间进行一些优化,虽然我们比赛里空间不是大事儿,但是!后面在学背包的时候,我们的空间的优化对时间也能优化

与其用数组,其实我们可以用若干变量来完成我们的代码,就不用再开数组了

如图,我们令t=a+b+c 然后让c变成t,但是又不能直接把c赋给t,我们要把abc整体向右边挪动一位,我们应该先把b=c ,然后a=b,最后再把c=t  然后我们再进入下一个循环算4,如果我们求3这个格子的话,我们循环一次就达到了,我们求4这个格子,循环两次,求n这个格子,循环n-3+1次也就是两闭区间

#include <iostream>
using namespace std;
typedef long long LL;int main()
{LL a,b,c;a = 1;b = 1;c = 2;LL n; cin >> n;for(LL i = 3;i<=n;i++){LL t = a+b+c;a = b;b = c;c = t;}if(n==1) cout << 1 << endl;elsecout << c << endl;}

这是我们的代码