淦,最后一道题没写出来,...还是我太菜了,不过这个题确实比较有趣.

G. Minimal Coverage

简化题意:就是你处在坐标轴的0点上,给你一个序列\(a_i\),每次你可以选择向左走\(a_i\),也可以选择向右走\(a_i\),求你走过的范围的最小值?(第一步必须向右走)。

其实这个题想起来也没那么复杂,显然每一步在选择时,我们需要一下的信息:当前所处的位置,当前走到哪一步了,当前所走过的范围的左右边界。信息蛮多的,如果用DP的话,当前走到哪一步了,这个很好解决,剩下的三个信息:当前的位置,走过的范围。这个时候我们再看下数据范围:\(n\leq 10^4,a_i\leq 1000\),这\(a_i\)的范围支持我们最多只能再存一个信息。遇到这种信息多,我们无法储存的时候,一般大的解决方法是观察信息之间有没有关系,能不能通过推到得出另一个信息来减少我们存储的信息量。但是:当前的位置,走过的范围。好像没什么明显的联系。剩下的办法就是根据题目的性质,设计更优的状态来减少我们需要记录的信息。可以思考最优解存在的性质,我们发现这个题起点是确定从零开始的,但其实我们完全可以自己调节起点的位置,这对题目没有什么影响。既然如此,我们可以将最优解的左端点移到原点,这样它所有的移动就都是在整数的坐标下移动了。那我们就规定0为左端点,之后考虑我们若在位置x,则右端点肯定越小越好。则我们设这样的状态f[i][j],即规定0为左端点时前i步后,当前点在j时的最小的右端点。发现这样一定能遍历到最优解。虽然当左端点固定后,起点的位置就不固定了,但在起始状态是我们可以枚举确定的,通过这种方法我们可以减少左端点不固定的麻烦。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10,M=1010,qwq=1e9;
int n,a[N],f[N][M<<2];
//f[i][j]表示前i步,当前在j的最小右端点。
int main()
{
//freopen("1.in","r",stdin);
int T;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
for(int i=1;i<=n;++i)
for(int j=0;j<=3000;++j) f[i][j]=qwq;
for(int i=a[1];i<=2000;++i) f[1][i]=i;//初始化起点。
int ans=qwq;
for(int i=2;i<=n;++i)
for(int j=0;j<=2000;++j) //枚举当前所处的位置。
{
if(j>=a[i]) f[i][j]=max(f[i-1][j-a[i]],j);
if(j+a[i]<=2000) f[i][j]=min(f[i-1][j+a[i]],f[i][j]);
}
for(int j=0;j<=2000;++j) ans=min(ans,f[n][j]);
printf("%d\n",ans);
}
return 0;
}

Codeforces Round #744 (Div. 3) G题题解的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

  3. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  4. Codeforces Round #573 (Div. 2) D题题解

    一.题目 ​ Tokitsukaze, CSL and Stone Game ​ Tokitsukaze和CSL正在玩一些石头游戏. ​ 一开始,有n堆的石头,第i堆石头数记为 \(a_i\),两人轮 ...

  5. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  6. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

  7. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  8. Codeforces Round #552 (Div. 3) A题

    题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...

  9. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

随机推荐

  1. PHP中环境变量的操作

    在 PHP 中,我们可以通过 phpinfo() 查看到当前系统中的环境变量信息(Environment).在代码中,我们也可以通过两个函数,查看和修改相应的环境变量信息. getenv() 获取环境 ...

  2. jquery动态生成dom(比如append)导致js事件无效

    如果无效用这个方法: on() 方法在被选元素及子元素上添加一个或多个事件处理程序. <div id="zkdiv">  <input type="bu ...

  3. ECSHOP产品内容页新增上传功能

    第一步:在 admin\templates\goods_info.htm中 <span class="tab-back" id="article-tab" ...

  4. Java基础系列(34)- 什么是数组

    数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们

  5. Laravel [1045] Access denied for user 'homestead'@'localhost' .env没有配置

    laravel 连接数据库出现错误 PDOException in Connector.php line 55:SQLSTATE[HY000] [1045] Access denied for use ...

  6. Nresource服务之接口缓存化

    1. 背景 Nresource服务日均4.5亿流量,考虑到未来流量急增场景,我们打算对大流量接口进行缓存化处理:根据服务管理平台数据统计显示getUsableResoureCount接口调用量很大,接 ...

  7. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】

    正题 题目链接:https://www.luogu.com.cn/problem/CF585E 题目大意 给出一个大小为\(n\)的可重集\(T\),求有多少个它的非空子集\(S\)和元素\(x\)满 ...

  8. 测试用例 setup 和 和 teardown

    前言 学过unittest的都知道里面用前置和后置setup呾teardown非常好用,在每次用例开始前呾结束后都去执行一次.当然迓有更高级一点的 setupClass 呾 teardownClass ...

  9. 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解

    软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...

  10. IDEA远程部署调试Java应用程序

    IDEA远程部署调试Java应用程序 目录 IDEA远程部署调试Java应用程序 基本概述 准备工作 远程服务器准备 安装JDK 配置JAVA_HOME 项目准备 创建一个SpringBoot项目 创 ...