首页 > 其他分享 >[SDOI2008] Sue 的小球 题解

[SDOI2008] Sue 的小球 题解

时间:2024-06-02 23:32:20浏览次数:20  
标签:node Sue int 题解 sv 时间 计算 SDOI2008

题目描述

首先将彩蛋按照横坐标从小到大排序,依次标号为 \(1\sim n\)。

显然,\(Sue\)走过一段时间后,走过的点一定属于一段连续区间。所以本题采用区间 \(dp\)。

不妨先做一个简单转化,由于每个彩蛋初始高度确定,若想让总分最高,就要使扣分最少。所以下面的 \(dp\) 从扣分最少入手。

设 \(f_{l,r,0/1}\) 表示走过 \(l\sim r\) 所有点,现在处于 \(l/r\),扣的最少分。

转移的关键就是处理时间。

其中一种显然的想法是,如果能处理当前的时间,那么由 \(A\)(当前点) 点走到 \(B\) 点,就能计算出到达 \(B\) 点的时间,并相应扣除分值,但是这样不得不在状态中加多一维时间,即 \(f_{l,r,t,0/1}\),空间爆炸,不行

刚刚的想法将所有点独立,即到达一个点在计算贡献,不妨将所有点看做整体。具体而言,从 \(A\) 点到 \(B\) 点需要时间 \(t\),计算没经过的点在时间 \(t\) 内损失的分值。设没经过的点速度总值为 \(sv\),那么损失分支为 \(sv\times t\)。

由于这种方法中,两点之间时间可计算,经过哪些点从状态 \(l,r\) 可知,速度总值前缀和计算即可。

剩下转移看代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N=1100;
int n,st;
LL f[N][N][2],sv[N];
struct node {
    int x,y,v;
}a[N];

int cmp(node x,node y) {
    return x.x<y.x;
}

LL calc(int l,int r) {
    return sv[r]-sv[l-1];
}

int main(){
    cin>>n>>st;
    for(int i=1;i<=n;i++) cin>>a[i].x;
    for(int i=1;i<=n;i++) cin>>a[i].y;
    for(int i=1;i<=n;i++) cin>>a[i].v;
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++) {
        sv[i]=sv[i-1]+a[i].v;
    }
    LL vsum=sv[n];
    memset(f,0x3f,sizeof(f));
    //损失的最小值
    for(int i=1;i<=n;i++) {
        f[i][i][0]=f[i][i][1]=1ll*abs(st-a[i].x)*vsum;
    }

    // for(int i=1;i<=n;i++) cout<<f[i][i][0]<<" ";

    for(int len=2;len<=n;len++) {
        for(int l=1;l+len-1<=n;l++) {
            int r=l+len-1;
            f[l][r][0]=min({f[l][r][0],f[l+1][r][0]+1ll*(a[l+1].x-a[l].x)*(vsum-calc(l+1,r)),f[l+1][r][1]+1ll*(a[r].x-a[l].x)*(vsum-calc(l+1,r))});
            f[l][r][1]=min({f[l][r][1],f[l][r-1][1]+1ll*(a[r].x-a[r-1].x)*(vsum-calc(l,r-1)),f[l][r-1][0]+1ll*(a[r].x-a[l].x)*(vsum-calc(l,r-1))});
            f[l][r][0]=min(f[l][r][0],f[l][r][1]+1ll*(a[r].x-a[l].x)*(vsum-calc(l,r)));
            f[l][r][1]=min(f[l][r][1],f[l][r][0]+1ll*(a[r].x-a[l].x)*(vsum-calc(l,r)));

            // cout<<"DEBUG:"<<"["<<l<<" "<<r<<"]:"<<f[l][r][0]<<" "<<f[l][r][1]<<endl;
        }
    }
    LL ysum=0;
    for(int i=1;i<=n;i++) ysum+=a[i].y;
    LL ans=ysum-min(f[1][n][0],f[1][n][1]);
    printf("%.3lf",ans/1000.0);
    return 0;
}
/*
*/

标签:node,Sue,int,题解,sv,时间,计算,SDOI2008
From: https://www.cnblogs.com/zhangyuzhe/p/18227810

相关文章

  • DVWA靶场---csrf遇到的问题解决方法
    1.解决low等级不携带cookie访问诈骗网站:设置---隐私与安全---浏览器隐私---增强型跟踪保护---自定义---cookie---跨站跟踪型cookie。2.解决medium等级referer显示不完整解决方法:在服务器的html上加一段:<metaname="referrer"content="no-referrer-when-downgrade">当从......
  • 力扣2891每日一题题解
    题目:给你一个仅由小写英文字母组成的字符串 s 。如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc" 不是特殊字符串,而字符串 "ddd"、"zz" 和 "f" 是特殊字符串。返回在 s 中出现 至少三次 的 最长特殊子字符串 的长度,如果不存在出......
  • P7311 [COCI2018-2019#2] Maja题解
    [COCI2018-2019#2]Maja题目描述蜜蜂Maja在一个神奇的牧场里为花朵传粉。牧场可用一个\(N\timesM\)的矩阵表示。在第\(i\)行第\(j\)列有\(C_{i,j}\)朵未传粉的花。Maja从位于第\(A\)行第\(B\)列的蜂巢出发,并前往牧场的一些区域后返回。Maja可以在\(1\)步内......
  • rt-thread 系统pm组件在4.1.1版本的无法正常唤醒的问题解决方法
    在老的rt-thread版本系统pm组件调试ok,后来使用4.1.1版本时发现进入低功耗后无法正常唤醒,问题解决路径如下硬件信息:cpu STM32L431CCT6新建系统打开pm组件后也没有drv_pm.c和drv_lptim.c自动添加,需要到系统目下找到并复制到driver目录下C:\RT-ThreadStudio\repo\Extract\R......
  • [题解]UVA11235 Frequent values
    https://www.luogu.com.cn/problem/UVA11235没看到多测调了半天每组数据给定\(n,q\)。接下来给出一个长度为\(n\)的不降序列\(A\)。接下来\(q\)次询问,每次询问给定\(l,r\),求\(A_{l\simr}\)中出现最多的那个数出现了多少次。\(1\len,q\le10^5\)。序列不降,意味着一个数在序......
  • CF1228E Another Filling the Grid 题解
    tag:容斥原题+组合数设F[i]F[i]F[i]表示至少......
  • [leetcode 第 400 场周赛]题解
    第一题:classSolution{publicintminimumChairs(Strings){intx=0;intans=0;for(inti=0;i<s.length();i++){if(s.charAt(i)=='E'){x--;if(x<0){ans++;x=0;......
  • [题解]P4381 [IOI2008] Island
    P4381[IOI2008]Island题意:给定一个基环树森林,求每个基环树的直径之和。我们发现,一棵基环树的直径只有下面两种情况:环上的某一点作为根的子树的直径。环上有两点,每个点引出一条链,然后再将这两点相连。对于第一种情况,我们仅需用树形dp的方法求出每个子树的直径(见OIWiki-......
  • 《扶苏的问题》题解
    《扶苏的问题》题解原题传送门:P1253扶苏的问题PS:请先阅读完题面,在继续观看题意概述:​ 对于给定的数列\({a_1,a_2,a_3……a_n}\),进行以下三个操作:​ 1.change 将区间\([L,R]\)的值修改为\(X\);​ 2.add 将区间\([L,R]\)的值加上为\(D\);​ 3.query 查询区间\([......
  • WSL2--DNS解析问题解决
    1.问题xurong@DESKTOP-SOE9MG1:~/.ssh$sudoaptupdateIgn:1http://security.ubuntu.com/ubuntunoble-securityInReleaseIgn:2http://archive.ubuntu.com/ubuntunobleInReleaseIgn:3http://archive.ubuntu.com/ubuntunoble-updatesInReleaseIgn:4http://archive......