动态规划(算法竞赛、蓝桥杯)--斜率优化DP任务安排

1、B站视频链接:E52 斜率优化DP [SDOI2012]任务安排_哔哩哔哩_bilibili

题目链接:任务安排 - 洛谷

cpp 复制代码
#include <bits/stdc++.h> 
using namespace std;
typedef long long LL;
const int N=5010;
int n,s,q[N];
LL tim[N],c[N],f[N];

double slope(int i,int j){ 
  return 1.0*(f[i]-f[j])
            /(c[i]==c[j]?1e-9:c[i]-c[j]);
}
int main(){
  scanf("%d%d",&n,&s);
  for(int i=1;i<=n;i++){
    scanf("%d%d",tim+i,c+i);
    tim[i]+=tim[i-1]; c[i]+=c[i-1];
  }
  
  int h=1,t=0;
  for(int i=1;i<=n;i++){
    while(h<t && slope(i-1,q[t])<=slope(q[t],q[t-1]))t--;
    q[++t]=i-1;    
    while(h<t && slope(q[h+1],q[h])<=tim[i]+s) h++;
    int j=q[h];
    f[i]=f[j]+tim[i]*(c[i]-c[j])+s*(c[n]-c[j]);
  }
  printf("%lld\n",f[n]);
} 
相关推荐
半问10 分钟前
付费投流硬控互联网
人工智能·算法·互联网·推荐·流量
西岸行者13 分钟前
学习Hammerstein-Wiener 模型,以及在回声消除场景中的应用
人工智能·学习·算法
夏乌_Wx28 分钟前
练题100天——DAY24:罗马数字转整数+环形链表+大小端判断
算法
youngee1128 分钟前
hot100-48腐烂的橘子
算法
liu****1 小时前
10.排序
c语言·开发语言·数据结构·c++·算法·排序算法
_OP_CHEN1 小时前
【算法基础篇】(三十二)动态规划之背包问题扩展:从多重到多维,解锁背包问题全场景
c++·算法·蓝桥杯·动态规划·背包问题·算法竞赛·acm/icpc
listhi5201 小时前
机械系统运动学与动力学在MATLAB及SimMechanics中的实现方案
人工智能·算法·matlab
fufu03111 小时前
Linux环境下的C语言编程(三十九)
c语言·数据结构·算法·链表
炽烈小老头1 小时前
【 每天学习一点算法 2025/12/12】回文链表
学习·算法·链表
前端小L1 小时前
回溯算法专题(十):二维递归的完全体——暴力破解「解数独」
数据结构·算法