Codeforces Round #744 (Div. 3) G题题解
淦,最后一道题没写出来,...还是我太菜了,不过这个题确实比较有趣.
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题题解的更多相关文章
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Codeforces Round #579 (Div. 3) 套题 题解
A. Circle of Students 题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...
- Codeforces Round #741 (Div. 2)部分题题解
我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...
- Codeforces Round #573 (Div. 2) D题题解
一.题目 Tokitsukaze, CSL and Stone Game Tokitsukaze和CSL正在玩一些石头游戏. 一开始,有n堆的石头,第i堆石头数记为 \(a_i\),两人轮 ...
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- Codeforces Round #582 (Div. 3)-G. Path Queries-并查集
Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...
- Codeforces Round #713 (Div. 3)AB题
Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...
- 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 ...
- Codeforces Round #198 (Div. 2)A,B题解
Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...
随机推荐
- Java环境搭建与HelloWprld—改变世界的第一步
1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...
- Node.js躬行记(10)——接口日志查询
当运营向我们上报BUG时,我们第一时间是捕获相关的接口.从监控系统中,就可以查到用户使用时接口的请求和响应数据. 若接口的请求正常,那么就需要深入到接口代码中,查看相关的日志,通常会先浏览数据库查询语 ...
- 在eclipse上配置tomcat(包括解决找不到server,配置8.0以上版本)
下载安装eclipse普通eclipse最多只支持到tomcat v 7,要想使用8以上的tomcat,就需要下载最新版本的Eclipse IDE,安装时 选择 Eclipse IDE for Ent ...
- PHP 处理历史数据的伪代码
<?php class a { protected static $Senior = [1, 2, 3]; protected static $NoSenior = [13, 14, 15, 1 ...
- windows kubectl 远程操作k8s
在windows 电脑上配置kubectl远程操作kubernetes 一.下载windows版的kubectl可执行文件 下载地址 二.创建.kube 建议使用git bash cd ~ mkdir ...
- centos 关于yum无法使用
一.网络问题 1.1 ping # 确认网络是否可以ping通, 通则不是网络问题(跳过), 不通则是网络问题(往下操作) ping www.baidu.com 1.2 检查网络模式 1.关闭虚拟机 ...
- Superedge的新特性和未来之路
作者 王冬,腾讯云高级研发工程师,专注于Kubernetes.容器等云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作. 背景 2021年9月27号,,在 ...
- Windows下Vim插件管理器Vundle的安装以及使用简介
Vundle下载 从GitHub clone仓库 cd %USERPROFILE% git clone git@github.com:VundleVim/Vundle.vim.git %USERPRO ...
- 国庆七天假 不如来学学Vue-Router
Vue-Router 基本介绍 Vue-Router是Vue全家桶中至关重要的一个扩展化插件,使用它能够让我们的组件切换更加的方便,更加容易的开发前后端分离项目,目前Vue-Router版本已更新到4 ...
- C++核心编程 4 类和对象-对象的初始化和清理
构造函数和析构函数 对象的初始化和清理工作是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用结果是未知的,同样,使用完一个对象或变量,没有及时清理,也会造成一定的安全问题.C++利用了构 ...