首页 > 其他分享 >力扣1235 2024.5.4

力扣1235 2024.5.4

时间:2024-05-04 17:44:19浏览次数:26  
标签:1235 2024.5 int max long 力扣 vector ans dp

原题网址:https://leetcode.cn/problems/maximum-profit-in-job-scheduling/submissions/529098063/

个人难度评价:1600

分析:一眼DP,考虑DP顺序,DP递推式与边界
十分类似背包,记i为第i段时间,显然有dp[i]=max(dp[i-1], dp[b[i]]+p[i])
由此得出递推顺序为按结束时间为第一关键字升序递推。边界自然可知

源码:此处直接使用map存储方便处理与查找。离散化也可。

//Code with C++
// 1235
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;

class Solution {
public:
    int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit){
        int n = startTime.size();
        vector<pair<pair<int, int>, long long>> m;
        m.push_back({{0, 0}, 0});
        for (int i=0; i<n; i++){
            m.push_back({{endTime[i], startTime[i]}, profit[i]});
        }
        sort(m.begin(), m.end());
        map<int, long long> dp;
        int s, e;
        long long v;
        long long ans = 0;
        for (int i=1; i<=n; i++){
            e = m[i].first.first;
            s = m[i].first.second;
            v = m[i].second;
            auto p = dp.lower_bound(s);
            if (p->first == s)
                v += p->second;
            else{
                if (p != dp.begin()){
                    v += (--p)->second;
                }
            }
            dp[e] = max(dp[e], v);
            dp[e] = max(dp[e], (--dp.find(e))->second);
            ans = max(dp[e], ans);
        }
        return ans;
    }
};

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    Solution s;
    vector<int> a = {1,2,3,4,6};
    vector<int> b = {3,5,10,6,9};
    vector<int> c = {20,20,100,70,60};
    cout << s.jobScheduling(a, b, c);
    return 0;
}```

标签:1235,2024.5,int,max,long,力扣,vector,ans,dp
From: https://www.cnblogs.com/TrainerMarvin/p/18172510

相关文章

  • 个人算法竞赛模板(2024.5.4)
    精简版:#include<algorithm>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<string>#include<vector>#include<......
  • 2024.5.3【比赛】高一下三调
    为了拓宽自己的英雄池,还是要写一下。分数&排名:理想:会牵挂的叫亲人,回不去的是故乡。现实:神虎一跃,威震天地!A.李时珍的皮肤衣今天输了,明天也要卷土重来。赛后加点卡赛时是不理解的。为啥这次就加点,上次数据范围错了都不把数据范围错的删了给我重测。自己手动模......
  • 2024.5.2考试总结
    今天又犯傻逼错误A简单背包,背包的大小开小了,100->10B数位DP,答案与输入并不在同一数量级,但我并不这么认为,所以我使用了高精度。说来我也是真的唐,只有加减的高精度调了30分钟以上C类似后效性处理,普通DP不行,用了一种很神秘的DP本来想的缩点转化成DAG做,但是统计方案数会有重复......
  • 力扣-304. 二维区域和检索
    1.题目题目地址(304.二维区域和检索-矩阵不可变-力扣(LeetCode))https://leetcode.cn/problems/range-sum-query-2d-immutable/题目描述给定一个二维矩阵matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角为(row1, col1),右下角为(row2, co......
  • 力扣-303. 区域和检索
    1.题目题目地址(303.区域和检索-数组不可变-力扣(LeetCode))https://leetcode.cn/problems/range-sum-query-immutable/题目描述给定一个整数数组 nums,处理以下类型的多个查询:计算索引 left 和 right (包含left和right)之间的nums元素的和,其中 left<=righ......
  • 2024.5 做题记录
    362.CF553EKyoyaandTrain直接dp,设\(h_i\)为\(i\ton\)的最短路,\(f_{u,i}\)为到了点\(u\)用了\(i\)秒,还需要的最小期望花费。显然对于\(i>t\)有\(f_{u,i}=h_u+x\),否则有:\[f_{u,i}=\min\limits_{(u,v,d)\inE}\sum\limits_{j=1}^ip_jf_{v,i......
  • 力扣198.打家劫舍*
    引言在做动态规划专题的过程中发现打家劫舍是一个十分经典的动态规划类型题,之后的好多题都有这道题的影子,比如我下一篇准备整理的740.删除并获得点数,弄明白打家劫舍真的可以算是动态规划入门了(所以这个动态规划门槛也太高了吧,我的脑子,我的脑子啊)题目你是一个专业的小偷,计划偷窃......
  • 力扣740.删除并获得点数
    题目给你一个整数数组nums,你可以对它进行一些操作。每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除所有等于nums[i]-1和nums[i]+1的元素。开始你拥有0个点数。返回你能通过这些操作获得的最大点数。解题思路​ 动态规划----打家......
  • 力扣746.使用最小花费爬楼梯
    题目给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费解题思路​ 动态规划1.首先需要明确,先支付......
  • 力扣-430. 扁平化多级双向链表
    1.题目题目地址(430.扁平化多级双向链表-力扣(LeetCode))https://leetcode.cn/problems/flatten-a-multilevel-doubly-linked-list/题目描述你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的子指针。这个子指针可能指向一个单独的双向链表,也......