P2365 任务安排(斜率优化)
发布日期:2021-06-30 10:20:38 浏览次数:3 分类:技术文章

本文共 1975 字,大约阅读时间需要 6 分钟。

普 通 n 2 的 转 移 是 普通n^2的转移是 n2

设 f 是 费 用 系 数 的 前 缀 和 数 组 , t 是 任 务 花 费 时 间 的 前 缀 和 数 组 设f是费用系数的前缀和数组,t是任务花费时间的前缀和数组 f,t

d p [ i ] = d p [ j ] + s ∗ ( f [ n ] − f [ j ] ) + t [ i ] ∗ ( f [ i ] − f [ j ] ) dp[i]=dp[j]+s*(f[n]-f[j])+t[i]*(f[i]-f[j]) dp[i]=dp[j]+s(f[n]f[j])+t[i](f[i]f[j])

让 我 们 按 照 惯 例 化 简 一 下 让我们按照惯例化简一下

d p [ j ] = s ∗ f [ j ] + t [ i ] ∗ f [ j ] − s ∗ f [ n ] − t [ i ] ∗ f [ i ] + d p [ i ] dp[j]=s*f[j]+t[i]*f[j]-s*f[n]-t[i]*f[i]+dp[i] dp[j]=sf[j]+t[i]f[j]sf[n]t[i]f[i]+dp[i]

d p [ j ] = ( s + t [ i ] ) ∗ f [ j ] − s ∗ f [ n ] − t [ i ] ∗ f [ i ] + d p [ i ] dp[j]=(s+t[i])*f[j]-s*f[n]-t[i]*f[i]+dp[i] dp[j]=(s+t[i])f[j]sf[n]t[i]f[i]+dp[i]

这 样 把 d p [ j ] 看 成 y , 把 f [ j ] 看 成 x 这样把dp[j]看成y,把f[j]看成x dp[j]y,f[j]x

发 现 直 线 的 斜 率 确 定 , 是 s + t [ i ] , 是 个 定 值 ( 因 为 当 前 在 转 移 i ) 发现直线的斜率确定,是s+t[i],是个定值(因为当前在转移i) 线,s+t[i],(i)

发 现 直 线 的 截 距 是 − s ∗ f [ n ] − t [ i ] ∗ f [ i ] + d p [ i ] 发现直线的截距是-s*f[n]-t[i]*f[i]+dp[i] 线sf[n]t[i]f[i]+dp[i]

惊 人 的 发 现 ! ! 截 距 只 和 i 有 关 , 说 明 截 距 越 小 , d p [ i ] 越 小 惊人的发现!!截距只和i有关,说明截距越小,dp[i]越小 !!i,,dp[i]

现在的任务就是找到一个j,使得这条直线的截距最小

那 么 维 护 一 个 下 凸 包 , 相 邻 两 点 的 斜 率 递 增 那么维护一个下凸包,相邻两点的斜率递增 ,

第 一 个 斜 率 大 于 s + t [ i ] 的 j 就 是 最 优 的 j 第一个斜率大于s+t[i]的j就是最优的j s+t[i]jj

#include 
using namespace std;const int maxn=5009;int n,s,tt[maxn],ff[maxn],q[maxn],dp[maxn];int t[maxn],f[maxn];int l=1,r=1;int mu(int l,int r){ return dp[l]-dp[r];}int zi(int l,int r){ return f[l]-f[r]; }int main(){ cin >> n >> s; memset(dp,127,sizeof(dp)); dp[0]=0; for(int i=1;i<=n;i++) cin >> tt[i] >> ff[i],t[i]=t[i-1]+tt[i]; for(int i=1;i<=n;i++) f[i]=f[i-1]+ff[i]; for(int i=1;i<=n;i++) { while( l
<=zi(q[l+1],q[l])*( s+t[i] ) ) l++; dp[i]=dp[q[l]]-( s+t[i] )*f[q[l]]+s*f[n]+t[i]*f[i]; while( l
<=mu(q[r],q[r-1])*zi(i,q[r]) ) r--;//剔除斜率小于当前直线的点 q[++r]=i; } cout << dp[n];}

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/108210847 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2-SAT[模板]
下一篇:对斜率优化的一点理解(围绕图讲解)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月09日 19时39分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章