Codeforces 1787C 思维,dp

3dMax脚本类插件:不写 C++也能造“原生”工具 从plugin关键字到场景持久化,拆解 MAXScript 插件开发全流程! 阅读详情

题意:

给出一个有nnn个元素的数组aaa和一个常数sss,将每个元素aia_{i}ai​分解为两个数xi,yix_{i},y_{i}xi​,yi​,满足
xi+yi=aixi≥0yi≥0(xi−s)⋅(yi−s)≥0 x_{i}+y_{i}=a_{i}\\ x_{i}\geq 0 \\ y_{i}\geq 0 \\ (x_{i}-s)\cdot(y_{i}-s)\geq 0 xi​+yi​=ai​xi​≥0yi​≥0(xi​−s)⋅(yi​−s)≥0
记FFF为
F=a1x2+y2x3+y3x4+....+yn−2xn−1+yn−1an F=a_{1}x_{2}+y_{2}x_{3}+y_{3}x_{4}+....+y_{n-2}x_{n-1}+y_{n-1}a_{n} F=a1​x2​+y2​x3​+y3​x4​+....+yn−2​xn−1​+yn−1​an​
求出FFF的最小值

Solution:

如果按顺序地考虑aia_{i}ai​的分解情况,对i∈[3,n−1]i\in[3,n-1]i∈[3,n−1]的分解情况只会影响到yi−1xi+yixi+1y_{i-1}x_{i}+y_{i}x_{i+1}yi−1​xi​+yi​xi+1​这两项,同时有
yi=ai−xi y_{i}=a_{i}-x_{i} yi​=ai​−xi​
则影响到的项为
yi−1xi+(ai−xi)xi+1 y_{i-1}x_{i}+(a_{i}-x_{i})x_{i+1} yi−1​xi​+(ai​−xi​)xi+1​
除了下标为iii的项都是常数,那么这就是一个关于xix_{i}xi​的一次函数,只会在xix_{i}xi​的可能取值范围端点处取得最值

按题意,xix_{i}xi​的取值范围为下列两个不等式组的并集
{xi≤syi=ai−xi≤sxi≥0yi=ai−xi≥0 \begin{cases} x_{i}\leq s \\ y_{i}=a_{i}-x_{i}\leq s \\ x_{i}\geq 0 \\ y_{i}=a_{i}-x_{i} \geq 0 \end{cases} ⎩⎨⎧​xi​≤syi​=ai​−xi​≤sxi​≥0yi​=ai​−xi​≥0​

{xi≥syi=ai−xi≥sxi≥0yi=ai−xi≥0 \begin{cases} x_{i}\geq s \\ y_{i}=a_{i}-x_{i}\geq s \\ x_{i}\geq 0 \\ y_{i}=a_{i}-x_{i} \geq 0 \end{cases} ⎩⎨⎧​xi​≥syi​=ai​−xi​≥sxi​≥0yi​=ai​−xi​≥0​

这两个不等式组的解集为
[max(0,min(s,a[i]−s)),min(a[i],max(s,a[i]−s))] [max(0,min(s,a[i]-s)),min(a[i],max(s,a[i]-s))] [max(0,min(s,a[i]−s)),min(a[i],max(s,a[i]−s))]
接下来只需要dpdpdp取最大最小值的情况即可,设dp[i][0/1]dp[i][0/1]dp[i][0/1]为将aia_{i}ai​分解为xix_{i}xi​最小或最大的情况下前iii项的最小取值

当i=2i=2i=2时
dp[2][0]=a[1]⋅x[2][0]dp[2][1]=a[1]⋅x[2][1] dp[2][0]=a[1]\cdot x[2][0]\\ dp[2][1]=a[1]\cdot x[2][1]\\ dp[2][0]=a[1]⋅x[2][0]dp[2][1]=a[1]⋅x[2][1]
当3≤i≤n−13\leq i \leq n-13≤i≤n−1时,枚举当前计算的状态jjj,和从i−1i-1i−1转移来的状态kkk,有
dp[i][j]=min(dp[i][j],dp[i−1][k]+y[i−1][k]⋅x[i][j]) dp[i][j]=min(dp[i][j],dp[i-1][k]+y[i-1][k]\cdot x[i][j]) \\ dp[i][j]=min(dp[i][j],dp[i−1][k]+y[i−1][k]⋅x[i][j])
FFF与ana_{n}an​的分配无关,答案就为
min(dp[n−1][0]+y[n−1][0]⋅a[n],dp[n−1][1]+y[n−1][1]⋅a[n]) min(dp[n-1][0]+y[n-1][0]\cdot a[n],dp[n-1][1]+y[n-1][1]\cdot a[n]) min(dp[n−1][0]+y[n−1][0]⋅a[n],dp[n−1][1]+y[n−1][1]⋅a[n])

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<bitset>
#include<cstdlib>
#include<cassert>
#include<cstring>
#include<cmath>
#include<utility>
#include<vector>
#include<cctype>
#include<utility>
#include<stack>
#include<queue>
#include<unordered_map>
#include<unordered_set>
#include<string>
#include<ctime>
#include<algorithm>
#include<map>
#include<set>
using namespace std;

using ll=long long;
const int N=2e5+5,inf=0x3fffffff;
const ll INF=0x3fffffffffffffff,mod=1e9+7;

ll dp[N][2],x[N][2],y[N][2],last[N][2];
int n,s,a[N];

inline void work() {
    cin>>n>>s;

    /**
     * x[i]+y[i]=a[i]
     * (x[i]-s)*(y[i]-s)>=0
     * F=a[1]*x[2]+(y[2]*x[3]+y[3]*x[4]+...+y[n-2]*x[n-1])+y[n-1]*a[n];
     */

    for(int i=1;i<=n;i++) {
        cin>>a[i];
        x[i][0]=max(0,min(s,a[i]-s));
        x[i][1]=min(a[i],max(s,a[i]-s));
        for(int j=0;j<=1;j++) {
            y[i][j]=a[i]-x[i][j];
            dp[i][j]=INF;
        }
    }

    dp[2][0]=a[1]*x[2][0];
    dp[2][1]=a[1]*x[2][1];

    for(int i=3;i<n;i++) {
        for(int j=0;j<=1;j++) {
            for(int k=0;k<=1;k++) {
                dp[i][j]=min(dp[i][j],dp[i-1][k]+y[i-1][k]*x[i][j]);
            }
        }
    }

    cout<<min(dp[n-1][0]+y[n-1][0]*a[n],dp[n-1][1]+y[n-1][1]*a[n])<<endl;
}

int main() {
    #ifdef stdjudge
        freopen("in.txt","r",stdin);
    #endif
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    int t; cin>>t;
    while(t--) work();

    #ifdef stdjudge
        freopen("CON","r",stdin);
        std::cout<<std::flush;
        system("pause");
    #endif
    return 0;
}

使用 DEM 模拟金属烧结过程 了解离散元素法 (DEM) 如何彻底改变烧结工艺,提高制造业的效率和精度。 阅读详情

相关推荐

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 182

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 217

解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

Hern(宋兆恒) 39万+

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 580

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 385

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 340

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 332

【部署优化篇三】《DeepSeek边缘计算实战:把目标检测模型塞进树莓派,让AI在巴掌大的设备上“开天眼“》

谁说只有超级计算机才能跑AI?今天咱们就要在树莓派上玩转DeepSeek目标检测,让这个巴掌大的小盒子变成会‘看’世界的智能终端!本文手把手教你从零开始,把最潮的目标检测模型塞进树莓派。全程高能预警,建议准备好你的树莓派4B/5和散热风扇,咱们这就开启边缘计算的魔法之旅!

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1305

搭建一个简单的 Django + Vue 项目

在本文中,我将为您详细介绍如何搭建一个简单的 Django + Vue 项目。Django 是一个使用 Python 编写的高级 Web 框架,而 Vue 是一个流行的 JavaScript 框架,用于构建用户界面。通过结合 Django 和 Vue,我们可以创建强大的全栈 Web 应用程序。创建 Django 项目设置 Django 后端创建 Vue 前端连接 Django 和 Vue让我们开始吧!

JfpBlockchain的博客 350

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 532

科研神器: 用Gemini 3

Edge藏了个科研开挂神器!免TZ/免谷歌账号用Gemini 3,1分钟上手(附保姆级教程) 做科研查文献、理数据总卡壳?想蹭Gemini 3的AI能力,却被“谷歌账号+TZ+节点筛选”三连劝退? 现在不用折腾了!Edge浏览器里装个插件,直接把Gemini 3揣进口袋——**免翻墙、免谷歌账号、国内直接用**,分分钟让你的科研效率翻三倍,导师都得问你“偷偷开了啥挂”!

ZhangJiqun&191cm&85kg 1159

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 339

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 369

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 300

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 435

C++ 求抛物线的顶点、焦点和准线(Finding the vertex, focus and directrix of a parabola)

已知抛物线方程 $ y = ax^2 + bx + c $,可利用公式求其顶点、焦点和准线。顶点为 $ \left( -\frac{b}{2a}, \frac{4ac - b^2}{4a} \right) $,焦点为 $ \left( -\frac{b}{2a}, \frac{4ac - b^2 + 1}{4a} \right) $,准线方程为 $ y = c - \frac{b^2 + 1}{4a} $。以 $ a=5, b=3, c=2 $ 为例,计算得顶点 $(-0.3, 1.55)$,焦点 $(-0

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 163

c++ 超级大坑未定义行为如何避免(下)

尤其是通过。

拒绝AI文,努力在AI时代写出感动人心的好文章 141

C 语言指针与输入输出

指针是 C 语言的魂,输入输出是和人交互的入口。这篇文章把"变量在内存里到底长什么样"讲透,接着用代码验证原码/反码/补码为什么非用补码不可,再拿进制转换、数组、printf/scanf 的格式符收尾。所有输出都是本机 gcc 真实跑出来的。

2401_89953644的博客 158

从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架

人机共存”正逐渐成为家用 UV-C 空气消毒产品的核心卖点。其中一类常见结构,是把 254 nm 紫外线灯置于吊扇扇叶上方,以扇叶盘作为物理遮挡,同时借助风扇强制对流实现空气循环消毒。专利文献对该结构的意图描述相当清晰:消毒平台遮挡紫外线灯朝下发出的光,使光线射向天花板,从而“不会让紫外线辐射到位于吊扇灯下方的用户”。然而,“结构上不直射”与“工程上安全且有效”之间,仍隔着一段需要实测数据来填补的距离。

HANDY09200的博客 692

【C++】【STL】string_OJ题

本文总结了9道C++ STL中关于string的OJ题目,按操作类型分为三组:反转与就地修改(如917、541、151)、计数与查找(如387、125、58)、模拟与大数运算(如415、43、8)。核心技巧包括双指针收敛、字符分类处理、进位控制及边界值处理。所有题目使用同一套源码,在标准库std::string与自定义容器MyString间切换仅需宏定义,验证结果一致性。代码通过随机测试用例与Trace函数逐行比对,确保逻辑正确性,强调接口对齐的重要性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 4359

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 364

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 867

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 737

cargo bench 快速上手

是 Rust 内置的基准测试命令,用于。不过,Rust 标准库的#[bench]属性目前仅在版本可用,因此在稳定版(stable)上,社区标准做法是使用框架。

Doublelv 的博客专栏。 339

C++09_vector类复习

本文以10个核心问题为主线,系统解析C++ vector的底层机制:从基本概念、初始化方式、遍历方法,到size与capacity的区别、扩容策略(VS 1.5×,g++ 2×)、reserve与resize差异、中间增删的挪动原理、迭代器失效原因,直至二维vector的内存布局(含三指针结构)。通过“先会用、再懂扩容、最后看清对象结构”的递进逻辑,揭示vector作为动态数组的本质——连续内存、自动扩容、随机访问高效,但插入删除代价高,迭代器易失效。全文深入浅出,助读者摆脱“黑盒”认知,真正掌握其内存图景

lemo_n_的博客 336
上一篇: 2019银川icpc A 分组背包
下一篇: AtCoder 259E LCM
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值