zoukankan      html  css  js  c++  java
  • leet code 1014. 最佳观光组合

    看到题目后感觉可以用动态规划,但是找不到状态转移方程,用本办法写了个算法,最终超时

    class Solution {
    public:
        int maxScoreSightseeingPair(vector<int>& A) {
            if (A.empty()) {
                return 0;
            }
            double max_value = 0;
            size_t max_i = 0;
            size_t max_j = 0;
            vector<vector<int>> map_val(A.size(), vector<int>(A.size(), 0));
            for (size_t i = 0; i < A.size(); i++) {
                for (size_t j=i + 1; j < A.size(); j++) {
                    map_val[i][j] = A[i] + A[j] + i -j;
                    if (map_val[i][j] > max_value) {
                        max_value = map_val[i][j];
                        max_i = i;
                        max_j = j;
                    }
                }
            }
    
            return max_value;
        }
    };
    

    在看了答案之后恍然大悟,原来每一个value的值可以看作是值加上它的序号,第i个值与其之前的最大值之间的和就是前i个数组对应的题目解,状态转移方程就建立起来了,代码如下:

    class Solution {
    public:
        int maxScoreSightseeingPair(vector<int>& A) {
            if (A.size() < 2) {
                return 0;
            }
            map<int, int> value_map;
            int result = 0;
            value_map[0] = A[0];
            int max_value = A[0];
            for (size_t i = 1; i < A.size(); i++) {
                int value_i = i + A[i];
                if (max_value < value_i) {
                    max_value = value_i;
                }
                value_map[i] = max_value;
                if (result < value_map[i-1] + A[i] - i) {
                    result = value_map[i-1] + A[i] - i;
                }
            }
    
            return result;
        }
    };
    
  • 相关阅读:
    字符串操作函数5!!
    字符串操作函数4
    字符串操作函数3
    java开发命名规范总结
    centerOS网络NAT和桥接
    input框的内容变化监听
    Xunsearch迅搜项目实战经验
    PHP网络爬虫之CURL学习
    Xunsearch的使用总结
    Xshell 5 过期
  • 原文地址:https://www.cnblogs.com/rulin/p/13155521.html
Copyright © 2011-2022 走看看