Problem P

Problem Description
在一无限大的二维平面中,我们做如下假设:<br>1、&nbsp;&nbsp;每次只能移动一格;<br>2、&nbsp;&nbsp;不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);<br>3、&nbsp;&nbsp;走过的格子立即塌陷无法再走第二次;<br><br>求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。<br>
 

Input
首先给出一个正整数C,表示有C组测试数据<br>接下来的C行,每行包含一个整数n (n<=20),表示要走n步。<br>
 

Output
请编程输出走n步的不同方案总数;<br>每组的输出占一行。<br>
 

Sample Input
2 1 2
 

Sample Output
3
7
简单题意:
  如上面所说的,走格子,可以向左右走,可以向上走,求出走N步不同的方案数。
解题思路形成过程:
  做了这么多动态规划的题目,在这个题目中我也用了递归的算法。就像找规律一样,总的方案数等于向左右走和向下走的和,最后,得到f[n]=f[n-1]*2+f[n-2]。状态转移方程是关键。
感想:
  前几项一个一个写出,就能慢慢地得到状态转移方程,但是如果规律性不是太强的动态规划题目,那么就难了。
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int n,i,c;
    long long int dp[21]={0,3,7};
    for(i=3;i<21;i++)
        {
            dp[i]=2*dp[i-1]+dp[i-2];
        }
    cin>>n;
    for(int j=0;j<n;j++)
    {
        cin>>c;
        cout<<dp[c]<<endl;
    }
    return 0;
}


### 关于CS50P Problem Set 0 的解决方案与资源 CS50P 是一门面向初学者的编程入门课程,Problem Set 0 主要关注基本概念和 Python 编程基础。以下是关于该问题集的相关资料和解答方法: #### 资源推荐 对于学习者来说,可以参考官方文档和其他公开的学习材料来完成 Problem Set 0。具体如下: - 官方 CS50 网站提供了详细的说明和提示[^1]。 - 可以利用 Python 官方文档作为辅助参考资料[^2]。 #### 解决方案概述 以下是一些常见的 Problem Set 0 中的任务及其解决思路: ##### 任务一:Hello World 实现 实现一个简单的程序打印 “Hello, world!” 到控制台。可以通过以下代码实现: ```python print("Hello, world!") ``` ##### 任务二:输入处理 编写一段代码接收用户的姓名并返回个性化的问候语。例如: ```python name = input("What is your name? ") print(f"hello, {name}") ``` 上述代码片段展示了如何获取用户输入并将之嵌入到输出字符串中的过程[^3]。 ##### 任务三:条件判断 创建一个小功能测试给定数值是否满足特定条件。比如验证年龄是否大于等于某个阈值: ```python age = int(input("How old are you? ")) if age >= 18: print("You are an adult.") else: print("You are a minor.") ``` 以上例子均基于标准 Python 功能构建而成,适合新手理解核心语法结构。 #### 学习建议 除了直接解决问题外,还应注重实践练习巩固知识点。尝试访问在线平台如 LeetCode 或 HackerRank 进行额外训练[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值