6 条题解

  • 4
    @ 2023-8-24 21:46:09

    前言:UP写快乐题解的一天 (并不快乐)

    学完了基础的动态DP以后就要自己设置状态来解题啦!而本题主要考察跳格子的动态转移方程。

    思路如下:

    1. 先按照题目描述的代码得到 x[N] 数组
    for (int i = 1; i <= n; i++)
    {
        int tmp = ((long long) A * i * i + B * i + C) % 20000;
        x[i] = tmp - 10000;
    }
    
    1. 因为每次只能跳 1~2 格,所以规定状态转移方程为:f[i] 等于 f[i - 1](前一格得到的最大数字)加上 x[i](本格数值) 与 f[i - 2] (前面第二个得到的最大数字)加上 x[i] 的最大值
    2. 最后记得循环要遍历从 2 开始到 n + 1 结束(因为要到 n + 1 格游戏才结束)
    3. 备注:f[1] 的初始化别忘记了些呀!

    最后是 AC code 奉上!

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 100005;
    int n, A, B, C, x[N], f[N];
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        cin >> n >> A >> B >> C;
        for (int i = 1; i <= n; i++)
        {
            int tmp = ((long long) A * i * i + B * i + C) % 20000;
            x[i] = tmp - 10000;
        }
        f[1] = x[1];
        for (int i = 2; i <= n + 1; i++)
            f[i] = min(f[i - 1] + x[i], f[i - 2] + x[i]);
    
        cout << f[n + 1];
    
        return 0;
    }
    

    完结,撒花✿✿ヽ(°▽°)ノ✿~~~

    • 3
      @ 2022-12-25 10:15:04
      #include <iostream>
      using namespace std;
      int x[100010],n,A,B,C;
      int main()
      {
      	cin >> n >> A >> B >> C;
      	for (int i = 1; i <= n; i++)
          {
          	int tmp = ((long long)A * i * i + B * i + C) % 20000;
          	x[i] = tmp - 10000;
          }
          for (int i = 2; i <= n + 1; i++)
          {
          	x[i] = max(x[i - 1], x[i - 2]) + x[i];
          }
          cout << x[n + 1];
      	return 0;
      }
      
      • 0
        @ 2024-6-9 8:53:07

        写题解请注意

        鼓励大家写题解,但注意题解格式。

        题解一定要有思路解析或代码注释,能否让别人理解你的思路

        也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

        给代码两端加上这个会舒服一些

        ```cpp

        你的代码

        ```

        </span>

        这个点在键盘的左上角tab上面那个键,注意切换输入法

        #include<iostream>
        using namespace std;
        int main()
        {
            int n;
            cin>>n;//这是一个注释
            return 0;
        }
        

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

        抄袭题解一经发现直接取消成绩。

        题解被删除的可能

        1. 代码不符合格式规范
        2. 没有思路讲解或者没有注释,
        3. 无意义的题解

        大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

        • 0
          @ 2023-3-27 18:53:51

          动态规划

              f[1]=x[1];
              for (int i=2;i<=n+1;i++)
                  f[i]=max(f[i-1]+x[i],f[i-2]+x[i]);
          
          • -2
            @ 2023-7-30 17:55:03

            最简题解:

            #include <bits/stdc++.h>
            using namespace std;
            int main()
            {
            cout << 23453668 << endl;
            return 0;
            }
            

            抱走流程:点赞 → 抱走

            • -6
              @ 2022-4-24 16:52:01

              写题解请注意

              鼓励大家写题解,但注意题解格式。

              题解一定要有思路解析或代码注释,能否让别人理解你的思路

              也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

              给代码两端加上这个会舒服一些

              ```cpp

              你的代码

              ```

              </span>

              这个点在键盘的左上角tab上面那个键,注意切换输入法

              #include<iostream>
              using namespace std;
              int main()
              {
                  int n;
                  cin>>n;//这是一个注释
                  return 0;
              } 
              

              请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

              抄袭题解一经发现直接取消成绩。

              题解被删除的可能

              1. 代码不符合格式规范
              2. 没有思路讲解或者没有注释,
              3. 无意义的题解

              大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

              • 1

              信息

              ID
              648
              时间
              1000ms
              内存
              16MiB
              难度
              4
              标签
              递交数
              196
              已通过
              94
              上传者