写点什么

dp 练习

作者:秋名山码民
  • 2022 年 6 月 17 日
  • 本文字数:622 字

    阅读完需:约 2 分钟

dp——动态规划,题目比较多样化,没有固定的模板,所以说多数的 dp 方程都要靠经验来写,我们挑几个看吧,bfs 专项(题目来自洛谷,蓝桥练习系统)

🍺乘积最大子数组



class Solution {public:    int maxProduct(vector<int>& nums) {        vector <int> maxF(nums), minF(nums);        for (int i = 1; i < nums.size(); ++i) {            maxF[i] = max(maxF[i - 1] * nums[i], max(nums[i], minF[i - 1] * nums[i]));            minF[i] = min(minF[i - 1] * nums[i], min(nums[i], maxF[i - 1] * nums[i]));        }        return *max_element(maxF.begin(), maxF.end());    }};
复制代码

🍻买卖股票


class Solution {public:    int maxProfit(vector<int>& prices) {        if(prices.size() == 0)            return 0;        int n = prices.size();        // f[i][0]: 手上持有股票的最大收益        // f[i][1]: 手上不持有股票,并且处于冷冻期中的累计最大收益        // f[i][2]: 手上不持有股票,并且不在冷冻期中的累计最大收益        vector<vector<int>> f(n, vector<int>(3));        f[0][0] = -prices[0];        for (int i = 1; i < n; ++i) {            f[i][0] = max(f[i - 1][0], f[i - 1][2] - prices[i]);            f[i][1] = f[i - 1][0] + prices[i];            f[i][2] = max(f[i - 1][1], f[i - 1][2]);        }        return max(f[n - 1][1], f[n - 1][2]);
}
};
复制代码


用户头像

卷不死,就往…… 2021.10.19 加入

2019NOIP退役成员,华为云享专家,阿里云专家博主,csdn博主,努力进行算法分享,有问题欢迎私聊

评论

发布
暂无评论
dp练习_6月月更_秋名山码民_InfoQ写作社区