首页 > 其他分享 >洛谷P3195 玩具装箱 题解报告

洛谷P3195 玩具装箱 题解报告

时间:2023-01-17 17:56:37浏览次数:67  
标签:P3195 洛谷 min int 题解 ll up st dp

题目地址

题意:

如题所述。

分析:

斜率优化dp模板题。

题目没看清就下手,自以为题面所述中 i > j;原始dp式子也没设计准确。

中途在错误方向上头铁时,甚至没注意到横坐标是沿负轴增长的。

思路

\(x=i-(j+1)+s_i-s_j\ (i>j)\)

令\(h=s_i+i,\ g=j+1+s_j\),则\(x=h-g\)。

对于dp原式:

\(dp[i]=min(dp[j]+(x-L)^2)\)
$ =min(dp[j]+g^2 +2Lg-2hg)+(h-L)^2$

令:

$ x=g,\ \ y=dp[i]+2Lg+g^2 ,\ \ k=2h,\ \ b=dp[i]-(h-L)^2 $

原式转换为\(b=min(y-kx)\)。也就是在k为给定值的情况下,去寻找小截距值。

由于是找最小值,用单调栈维护下凸包,每次用斜率为正的直线切,找到最优点,从最小截距值中获得dp[i]。

上次用了单调队列,这次就用二分查找吧,复杂度\(O(nlogn)\)。

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 5e4+5;

ll dp[maxn];
struct Pos{
    ll x,y;
} st[maxn];

int main()
{
    cin.tie(0)->sync_with_stdio(false);
    int n;
    ll L;
    cin>>n>>L;
    ll s=0; //前缀和
    int up=1;
    st[1]={1,2*L+1};
    for(int i=1;i<=n;++i)
    {
        ll t,x,y;
        cin>>t;
        s+=t;
        ll k =2*(s+i);
        int l=0,r=up;
        while(r-l!=1)
        {
            int m=(r+l)/2;
            if(st[m+1].y-st[m].y<k*(st[m+1].x-st[m].x))
                l=m;
            else
                r=m;
        }
        dp[i]=st[r].y-k*st[r].x+(s+i-L)*(s+i-L);
        x=i+1+s;
        y=dp[i]+2*L*x+x*x;
        while(up>1 && (st[up].y-st[up-1].y)*(x-st[up].x)>(y-st[up].y)*(st[up].x-st[up-1].x))
            --up;
        st[++up]={x,y};
    }
    cout<<dp[n];
}

标签:P3195,洛谷,min,int,题解,ll,up,st,dp
From: https://www.cnblogs.com/blover/p/17058419.html

相关文章

  • 洛谷P3628 特别行动队 题解报告
    题目地址题意:把正整数序列分隔为若干区间,若单个区间的元素之和为X,则其贡献为\(aX^2+bX+c\)。求所有区间的贡献之和的最大值。分析:斜率优化dp模板题。这篇博客描述得......
  • 洛谷 P1098 [NOIP2007 提高组] 字符串的展开
    洛谷链接牛客链接两个平台都过了题目:题解:本题是一道比较硬核的模拟题,思路方面其实问题不大,但是难在模拟情况上面而且测试数据里还包含了一些题目中没有提到的情况,所......
  • 1.17模拟赛题解
    T1设\(dp_{i,j}\)前\(i+j\)个人站队,第一排站\(i\)个人的方案数。每次对相同身高的一段人进行转移。暴力复杂度是正确的。时间复杂度\(O(n^2)\)。T4考虑二分答......
  • iSCSI的客户端messages频繁报错问题解决
    问题现象:在自己的工作站中安装的RAC测试环境,使用了iSCSI模拟共享存储,环境运行OK,但是在messages信息中频繁报错如下:[root@db01rac2~]#tail-20f/var/log/messagesJan......
  • 送礼物题解
    题目描述达达帮翰翰给女生送礼物,翰翰一共准备了N个礼物,其中第i个礼物的重量是G[i]。达达的力气很大,他一次可以搬动重量之和不超过W的任意多个物品。达达希望一次搬......
  • 清单计价-2022鹏业云计价i20常见问题解答整理
    1、如何批量将EXCEL报表的工程结构、清单和定额一次性导入计价软件?答:通过云计价i20软件的“导入Excel新建”功能,可以将招标控制价、投标报价等多种类型的表格一次性导入软件......
  • CF1748B题解
    题目传送门简要题意给定一个长度为\(n\)的只由数字\(0\)到\(9\)组成的字符串\(s\),求\(s\)中有多少个子串满足所有数字出现次数的最大值小于等于出现的不同数......
  • THUCTF MISC题解
    永不停歇的Flag生产机这是一台永不停歇的Flag生产机,它会生产出许许多多的Flag供你挑选和使用,就连这道题的Flag也是由这台生产机制造出来的。哦放心,我知道你想......
  • CF 1779C Least Prefix Sum 题解
    CF链接:LeastPrefixSumLuogu链接:Least PrefixSum${\scr\color{CornflowerBlue}{\text{Solution}}}$先来解释一下题意:给定一个数组,问最少把多少个数变成相反数,......
  • 洛谷P1496 火烧赤壁【题解】
    事先声明本题解文字比较多,较为详细,算法为离散化和差分,如会的大佬可以移步去别处看这道题的思路(因为作者比较懒,不想新开两个专题)。题目简要给定每个起火部分的起点和终点......