[Codeforces 1579G] Minimal Coverage

2023-11-09

You are given n lengths of segments that need to be placed on an infinite axis with coordinates.

The first segment is placed on the axis so that one of its endpoints lies at the point with coordinate 0. Let’s call this endpoint the “start” of the first segment and let’s call its “end” as that endpoint that is not the start.

The “start” of each following segment must coincide with the “end” of the previous one. Thus, if the length of the next segment is d and the “end” of the previous one has the coordinate x, the segment can be placed either on the coordinates [x−d,x], and then the coordinate of its “end” is x−d, or on the coordinates [x,x+d], in which case its “end” coordinate is x+d.

The total coverage of the axis by these segments is defined as their overall union which is basically the set of points covered by at least one of the segments. It’s easy to show that the coverage will also be a segment on the axis. Determine the minimal possible length of the coverage that can be obtained by placing all the segments on the axis without changing their order.

Input
The first line contains an integer t ( 1 ≤ t ≤ 1000 ) (1≤t≤1000) (1t1000) — the number of test cases.

The next 2t lines contain descriptions of the test cases.

The first line of each test case description contains an integer n ( 1 ≤ n ≤ 1 0 4 ) (1≤n≤10^4) (1n104) — the number of segments. The second line of the description contains n space-separated integers a i ( 1 ≤ a i ≤ 1000 ) a_i (1≤a_i≤1000) ai(1ai1000) — lengths of the segments in the same order they should be placed on the axis.

It is guaranteed that the sum of n over all test cases does not exceed 1 0 4 10^4 104.

Output
Print t lines, each line containing the answer to the corresponding test case. The answer to a test case should be a single integer — the minimal possible length of the axis coverage.

Example
inputCopy

6
2
1 3
3
1 2 3
4
6 2 3 9
4
6 8 4 5
7
1 2 4 6 7 7 3
8
8 6 5 1 2 2 3 6

outputCopy

3
3
9
9
7
8

Note
In the third sample test case the segments should be arranged as follows: [0,6]→[4,6]→[4,7]→[−2,7]. As you can see, the last segment [−2,7] covers all the previous ones, and the total length of coverage is 9.

In the fourth sample test case the segments should be arranged as [0,6]→[−2,6]→[−2,2]→[2,7]. The union of these segments also occupies the area [−2,7] and has the length of 9.

题意:
给出n个线段,以及一个无限大的坐标轴,第一个线段以0为起点进行放置,后面的线段必须以前一个的终点为起点放置,这就有两种方式,向左向右
用memset会被卡TLE,所以说尽量还是手动 f o r for for来进行初始化
d p [ i ] [ j ] dp[i][j] dp[i][j]是前 i i i个线段以轴上一点 j j j为终点的覆盖长度大小
因为可能出现直接向左进行放的情况,所以说左边的点可能会出现负数,这里可以进行偏移一点
枚举 n n n个线段,每个线段的长度为 a [ i ] a[i] a[i]
然后枚举终点坐标j{
向左放置:
if(j<=a[i]) dp[i][0] = min(dp[i][0],dp[i-1][j]+a[i]-j);
else dp[i][j-a[i]] = min(dp[i][j-a[i]],dp[i-1][j]
向右放置:
dp[i][j+a[i]] = min( dp[i][j+a[i]],
max(dp[i-1][j],a[i]+j)
)
}

int n;
int a[10007];
int dp[10007][2001];
int main() {
  int _ = read;
  while (_--) {
    n = read;
    for (int i = 1; i <= n; i++) a[i] = read;
    for (int i = 0; i <= n; i++) {
      for (int j = 0; j <= 2000; j++) dp[i][j] = 0x3f3f3f3f;
    }
    dp[0][0] = 0LL;
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j <= 2000; j++) {
        if (j <= a[i])
          dp[i][0] = min(dp[i][0], dp[i - 1][j] + a[i] - j);
        else
          dp[i][j - a[i]] = min(dp[i][j - a[i]], dp[i - 1][j]);
        dp[i][j + a[i]] = min(dp[i][j + a[i]], max(dp[i - 1][j], a[i] + j));
      }
    }
    int ans = 0x3f3f3f3f;
    for (int i = 0; i <= 2000; i++) {
      ans = min(ans, dp[n][i]);
    }
    printf("%d\n", ans);
  }
  return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Codeforces 1579G] Minimal Coverage 的相关文章

  • 蓝桥杯接龙数列(动态规划)

    蓝桥杯2023年第十四届省赛真题 接龙数列 C语言网 dotcpp com 我们要求最少删除多少个数 可以使剩下的序列是接龙序列 那么找到一条最长的接龙数列即可求出最少删除的个数 运用动态规划的思想 从前往后挨个考虑每个数字 一个前缀为6的
  • 数学建模常用的四大模型

    目录 1 评价模型 2 优化模型 3 分类模型 4 预测模型 本文主要介绍数学建模的四大模型分类 分别是评价模型 优化模型 分类模型 预测模型 关注公众号 数模乐园 回复 买 获得更多数模教程 1 评价模型 评价模型可以处理难于完全定量分析
  • 【类】二维dp:动态规划背包问题

    dp n m 含义就是 当有n种物品时且背包有m容量时 这个背包能产生的最大价值 状态转换关系是 dp n m dp n 1 m dp n 1 m 新物品重量 意思就是 当面对新来的一个物品时 求这个情况下 背包能产生的最大价值 相当于求下
  • 华为od机考题目-HJ68-成绩排序(比较难)

    while 1 try count int input reverse True if input 0 else False temp lt
  • [leetcode] 推多米诺 双指针

    题目链接 一开始想多了 像成了真实生活中的那种会叠加的状态 就比如 RRL 中 左边的两个 R 会让第三个 L 向右边倾斜 直接用前缀和进行操作 但是发现示例1都无法通过 所以说是错的 正确的想法是 每一个暂未确定状态的 都由这个字符两侧最
  • 备战2023蓝桥国赛-饼干

    题目描述 解析 这道题我想了很多种解决方法 但无一例外都失败了 实在是按照常规线性DP的思路真的想不出来 看了题解之后才知道它是分为三步解决这个问题的 第一步 缩小最优解的范围 先用贪心将最优解缩小到某个较小的范围内 再DP求出精确的最优解
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • 代码随想录算法训练营第十九天

    动态规划系列5 6 7 8 377 组合总和 未看解答自己编写的青春版 重点 代码随想录的代码 我的代码 当天晚上理解后自己编写 求排列数的题 用二维DP过不了 自己捋逻辑的话 也是可以觉得有漏洞 但是怎么修改 一下子还没思路 包括后面的
  • 最短Hamilton路径

    题目 题目链接 题解 状压dp f i j 表示从0点按照路径i走到j点的最短距离 其中i为二进制数 1表示走过某点 0表示未走过某点 比如10010表示经过了1 4两个点 而不经过0 2 3点 状态转移为 假设沿路径i走到j点经过k点 且
  • OJ题目8--动态规划问题

    1 509 斐波那契数 力扣 LeetCode leetcode cn com 过去一直用递归法 但由于栈区空间的限制 当递归过深时容易发生栈溢出 int fib int n if n 0 return 0 else if n 1 retu
  • Thief in a Shop 【CodeForces - 632E】【背包】

    题目链接 给了N个物品 每个物品无限个 我们要的是求刚好我们拿了K个物品的时候 能组成哪几种数 我们可以想个办法去填充 那么就需要有一个所谓的0状态 然后假如不足K个的时候 就可以拿这个所谓的0状态来填充了 所以 我们把所有的数排序 然后都
  • 要求输入月份,判断该月所处的季节并输出季节(假设:12、1、2 月为冬季,依次类推)

    public class Task 10101003 03 public static void main String args Scanner input new Scanner System in System out println
  • 斐波那契数列——UPC

    题目描述 斐波那契数列F满足如下性质 F1 1 F2 2 Fi 2 Fi 1 Fi 对于一个正整数n 它可以表示成一些不同的斐波那契数列中的数的和 你需要求出 有多少种不同的方式可以表示出n 输入 输入有多组数据 第一行为一个整数T 表示数
  • 华为od机考真题-数据分类

    while 1 try c b nums list map int input split dp
  • 动态规划之多重背包模型

    前置知识 01背包问题 动态规划之01背包模型 如何何何的博客 CSDN博客 完全背包问题 动态规划之完全背包模型 如何何何的博客 CSDN博客 多重背包问题 给定一个有一定容量的背包 和 n 个物品 每个物品有 si 件 每个物品有其对应
  • 编程题——连续最大和

    编程题 连续最大和 题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n
  • 超简单:很火的3D立体动态相册,送给心爱的那个人

    1 首先 我们一共需要三个文件 目录关系如下所示 先建index html文件吧 电脑上先创建一个 txt文件 在里面加入代码后保存 重命名为index html 记得把原来的 txt后缀覆盖 html我用的谷歌浏览器 index html
  • acwing算法提高之动态规划--最长上升子序列模型(上)

    目录 1 基础知识 2 模板 3 工程化 1 基础知识 暂无 2 模板 暂无 3 工程化 题目1 怪盗基德的滑翔翼 有N个数 表示房屋的高度 你可以任意选择一个房屋作为起点 选择朝左飞 或者朝右飞 必须严格递减才能够飞到下一个房屋 求经过的
  • 【算法】【动规】最长递增子序列

    跳转汇总链接 动态规划算法汇总链接 2 1 最长递增子序列 题目链接 给你一个整数数组 nums 找到其中最长严格递增子序列的长度 子序列是由数组派生而来的序列 删除 或不删除 数组中的元素而 不改变其余元素的顺序 例如 3 6 2 7 是
  • 【数位dp】【动态规划】C++算法:233.数字 1 的个数

    作者推荐 动态规划 C 算法312 戳气球 本文涉及的基础知识点 动态规划 数位dp LeetCode 233数字 1 的个数 给定一个整数 n 计算所有小于等于 n 的非负整数中数字 1 出现的个数 示例 1 输入 n 13 输出 6 示

随机推荐

  • Fabric开发(三)ubuntu下启动Fabric2.2.0网络,并测试一个Fabcar的demo

    前面几章内容 我们已经详细讲解过fabric 1 4 3网络搭建 fabric2 2 0本地编译 今天 我们在fabria2 2 0版本中 启动一个网络 并用SDK调用一个fabcar 的demo 体验一下fabric新版本 我们今天用No
  • 华为云AI视觉开发平台--HiLens使用中如何导入(转换)模型?

    HiLens是华为云的端云协同多模态AI开发应用平台 提供简单易用的开发框架 开箱即用的开发环境 丰富的AI技能市场和云上管理平台 对接多种端侧计算设备 支持视觉及听觉AI应用开发 AI应用在线部署 海量设备管理等 华为HiLens由AI推
  • 玩转Mixly – 9、Arduino AVR编程 之 函数

    以下内容源自Mixly官方技术文档 https mixly readthedocs io zh CN latest Arduino AVR 08Functions html 函数 在函数部分 主要分为定义函数和执行函数 需注意 当用户自定义
  • PHP自学教程之PHP加密函数

    数据加密的基本原理就是对原来的明文的文件或数据按某种算法进行处理 使其成为不可读的一定代码 通常称为 密文 通过这样的途径来达到保护数据不被非法窃取和阅读目的 PHP加密的函数主要有 crypt md5 和sha1 函数 还有加密的拓展库M
  • REDIS09_LBS出现背景、GEO算法介绍、算法步骤、剖析、邻近网格位置推算

    文章目录 LBS出现的背景 重新认识经纬度 感性认识GeoHash Geohash算法介绍 Geohash算法步骤 更深入剖析GeoHash 邻近网格位置推算 LBS出现的背景 移动互联网时代LBS应用越来越多 所在位置附近三公里的药店 交
  • Spring Boot + Spring Cloud + Spring Cloud Alibaba 版本对照表

    Json 详细数据 Spring Cloud 版本对应文档 Spring Cloud Alibaba 版本对应文档 spring cloud dependencies 版本 spring cloud 版本 spring boot 版本 sp
  • 4,使用 OpenCV 进行边缘检测

    效果微信扫码查看 原图 sobel X sobel Y sobel XY canny边缘检测 边缘检测是一种图像处理技术 用于识别对象的边界 边缘 或图像内的区域 边缘是与图像相关的最重要的特征之一 我们通过图像的边缘了解图像的底层结构 因
  • 第1组 团队展示

    1 组长博客链接 组长博客 2 团队项目描述 借呗 想借就借无需等待的资源管理平台 3 队员风采 林睿 风格 日常迷糊 喜欢慵懒随性 擅长的技术 还没有可以说得上擅长的技术 会基础的c和c 一点点python 编程的兴趣 想好好学pytho
  • 今日头条最新signature

    最新今日头条sign加密更新了 抽时间看了看 比上次的加密难度增加了许多 接下来讲下加密流程 今日头条获取下一页面的数据时断点位置 我们只需要找到window byted acrawler的生成就可以了 用fiddler拦击服务器返回的的r
  • Sortablejs实现vue项目表格拖动排序

    1 简介 Sortable js是一款优秀的js拖拽库 支持ie9及以上版本ie浏览器和现代浏览器 也可以运行在移动触摸设备中 不依赖jQuery 支持 Meteor AngularJS React Vue Knockout框架和任何CSS
  • Tomcat 9 免安装版 配置教程

    1 首先进入到https tomcat apache org 下载对应版本的TomCat 的 zip 包 解压到PC某个文件夹中 2 进入到目录 解压路径 bin 下 如我的路径参考 D Tomcat apache tomcat 9 0 6
  • Android 使用 okhttp3和retrofit2 进行单文件和多文件上传

    目录 前言 一 单文件上传 二 多文件上传 总结 前言 开发项目中需要进行单文件多文件的上传功能 下面演示的ApiResponse是自己分装的返回值 要根据自己的项目来完成 使用的mvvm框架 kotlin协程 看下大体思路和传参形式 仅供
  • leetcode刷题(9.24总结)

    1 相交链表 题目描述 https leetcode cn problems intersection of two linked lists class Solution def getIntersectionNode self head
  • 不平衡数据处理技术——RUSBoost

    RUSBoost是一个非常简单的针对不平衡数据集的算法 算法如其名 就是RUS Boost RUS random undersampling 随机欠抽样 随机从数据集中抽取一定量的多数类样本和少数类组成平衡分布的训练数据集 Boost 指的
  • linux 给lvm磁盘扩容

    目录 linux 给lvm磁盘扩容 扩容步骤 确认可用空间 创建新的物理卷 将物理卷添加到现有的卷组中 扩展逻辑卷 linux 给lvm磁盘扩容 早上到公司发现磁盘满了 挂载点是一个lvm 跟领导确认后决定先扩容再清理 原先是1T 决定扩容
  • oRACLE错误怎么办,Oracle的常见错误及解决办法

    ORA 12528 TNS listener all appropriate instances are blocking new connections ORA 12528问题是因为监听中的服务使用了动态服务 实例虽然启动 但没有注册到监
  • 解决adbd cannot run as root in production builds问题

    1 验证你的手机是否已经root了 adb shell su 行命令后 变为 即 表示root 成功 2 安装adbd insecure apk adb install adbd insecure apk 3 设置 打开应用将Enable
  • 集成公告|多链NFT游戏Blockchain Monster Hunt即将上线Moonbeam

    用户现可在Moonbase Alpha测试网体验Blockchain Monster Hunt游戏 并计划将于明年Moonbeam启动后上线Moonbeam平台 Moonbeam宣布支持多链NFT游戏Blockchain Monster H
  • 【弱网测试】

    弱网测试简介 1 测试方法及工具 随着互联网的快速发展 越来越多的应用核心功能需要联网实现 现在的网络制式有2G 3G 4G 5G 还有越来越多的公众WiFi 不同的网络环境和网络制式的差异都会对用户使用APP造成一定的影响 弱网测试作为健
  • [Codeforces 1579G] Minimal Coverage

    You are given n lengths of segments that need to be placed on an infinite axis with coordinates The first segment is pla