首页 > 其他分享 >cf1945D 插队的最小花费

cf1945D 插队的最小花费

时间:2024-03-28 12:33:23浏览次数:21  
标签:cf1945D 花费 ll 插队 cin rep dp

排队时前面有n个人,现在想通过插队来排进队伍前m,每次插队时可以选择前面的某个人x,与他互换位置,需要支付a[x]的费用给x,并且还要支付给中间每个人b[i]的费用。现在给定a[i]和b[i],求最小花费。
1<=m<=n<=2e5; 1<=a[i],b[i]<=1e9

对于中间的某个人,要么经过他,要么跨过他,记dp[i][0]表示插队到位置i并且跨过他的最小花费,dp[i][1]表示插队到位置i并且经过他的最小花费,从后往前递推即可。

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    const ll inf = 1e18;
    #define rep(i,a,b) for(ll i=a; i<=b; i++)
    #define per(i,a,b) for(ll i=b; i>=a; i--)
    ////////////////////////////////////////////////////
    const ll N = 200005;
    ll n, m, a[N], b[N], dp[N][2];
    void solve() {
        cin >> n >> m;
        rep(i,1,n) cin >> a[i];
        rep(i,1,n) cin >> b[i];
        dp[n+1][0] = dp[n+1][1] = 0;
        per(i,1,n) {
            dp[i][0] = b[i] + min(dp[i+1][0], dp[i+1][1]);
            dp[i][1] = a[i] + min(dp[i+1][0], dp[i+1][1]);
        }
        ll ans = inf;
        rep(i,1,m) {
            ans = min(ans, dp[i][1]);
        }
        cout << ans << "\n";
    }
    ////////////////////////////////////////////////////
    int main() {
        int t = 1; cin >> t;
        while (t--) solve();
        return 0;
    }
    int myinit = []() {
        cin.tie(0)->sync_with_stdio(0);
        return 0;
    }();

标签:cf1945D,花费,ll,插队,cin,rep,dp
From: https://www.cnblogs.com/chenfy27/p/18101338

相关文章

  • 最优乘车+最小花费(Dijkstra写法)
    题目描述H 城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到 H 城旅游,他很想去 S......
  • LCR 088. 使用最小花费爬楼梯
    数组的每个下标作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](下标从0开始)。每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为0或1的元素......
  • 【华为OD机试】真题B卷-最大花费金额(C++)
    华为OD机试真题汇总目录  【华为OD机试】真题汇总A+B+C+D券(Python实现)  【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)  【华为OD机试】真题汇总A+B+C+D卷(C++实现)一、题目题目描述:双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,......
  • 746. 使用最小花费爬楼梯c
    intmin(inti,intj){if(i<j)returni;returnj;}intminCostClimbingStairs(int*cost,intcostSize){int*dp=(int*)malloc(sizeof(int)*(costSize+3));dp[0]=0;dp[1]=0;for(inti=2;i<=costSize;i++){dp[i]=min(dp[i-......
  • 代码随想录算法训练营第三十八天| ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯
    理论基础 代码随想录(programmercarl.com)动态规划的五部曲:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组斐波那契数 题目链接:509.斐波那契数-力扣(LeetCode)思路:还好。classSolution{public:intfib(intn)......
  • 代码随想录算法训练营第三十八天 | 746. 使用最小花费爬楼梯,、70. 爬楼梯,509. 斐波那
     509.斐波那契数 已解答简单 相关标签相关企业 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>......
  • day38 动态规划part1 代码随想录算法训练营 746. 使用最小花费爬楼梯
    题目:746.使用最小花费爬楼梯我的感悟:哈哈,我居然自己独立写出来了,确实,只要定义定清楚了,哪怕定的含义只有自己能看懂,只要定义一致就可以求出解决来!!!我真是个大天才!!理解难点:听课笔记:代码示例:classSolution:defminCostClimbingStairs(self,cost:List[int])->int:......
  • 免费工具 Winsw 和 NSSM 适合对服务管理功能有一定要求的用户,且不想花费额外费用;SRVAN
    免费工具:SRVANY:优点:允许将任何可执行文件转换为服务。Windows自带工具,无需额外安装。简单易用,适合基本的服务管理需求。缺点:功能相对简单,不支持高级的服务管理功能。不再得到官方支持和更新,可能存在一些稳定性问题。Winsw:优点:简单易用,提供了一个简单的配置......
  • 代码随想录 da38 斐波那契数 爬楼梯 使用最小花费爬楼梯
    斐波那契数本题非常简单只是熟悉动态规划的基本流程爬楼梯本题是上题的略微扩展,本题没有明确给出状态转移方程和初始值这里的想法是到第i层需要先到第i-1层或者第i-2层那么实际上第i层的到达方法数就是第i-1层和第i-2层的到达方法数的和使......
  • 使用最小花费爬楼梯 动态规划初理解
    该题是动态规划入门程度,但最开始做的时候还是无从下手。我觉得卡哥给的步骤很重要:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组首先明确dp数组(dptable)以及下标的含义很重要,最开始做这道题的时候,设了dp但不知道是代表什么。......