zoukankan      html  css  js  c++  java
  • Leetcode 5331.跳跃游戏

    题目描述:

     

     题解:令dp[i]为从位置i开始所能访问的最大下标数。转移方程为dp[i] = max(dp[i],dp[j]+1),j为位置i可达点的下标。自底向上更新的dp,优先把位置低的点d更新出来即可。

    (一开始一直没有找到合适的有序遍历方法,其实排序一下就好了 )

    AC代码:

    int maxJumps(vector<int>& arr, int d) {
            int n = arr.size();
            vector<vector<int>> temp;
            vector<int> dp(n, 0);
            int res = 1;
            for (int i = 0; i < arr.size(); i++)
                temp.push_back({ arr[i],i });
            sort(temp.begin(), temp.end());
    
            for (int i = 0; i < n; i++) {
                int index = temp[i][1]; //编号;
                dp[index] = 1;
                //向左找
                for (int j = index - 1; j >= index - d && j >= 0; j--) {
                    if (arr[j] >= arr[index]) break;
                    if (dp[j] != 0) dp[index] = max(dp[index], dp[j ] + 1);
                }
                //向右找
                for (int j = index + 1; j <= index + d && j < n; j++) {
                    if (arr[j] >= arr[index]) break;
                    if (dp[j] != 0) dp[index] = max(dp[index], dp[j] + 1);
                }
                res = max(dp[index], res);
            }
            return res;
    
        }
  • 相关阅读:
    2017-12 CDQZ集训(已完结)
    BZOJ1492 货币兑换 CDQ分治优化DP
    BZOJ2001 [Hnoi2010]City 城市建设 CDQ分治
    树套树小结
    跑路了
    NOI2020 游记
    半平面交模板
    Luogu 3245 大数
    Luogu 3246 序列
    test20190408(十二省联考)
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12252414.html
Copyright © 2011-2022 走看看