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 ...
随机推荐
- 机器学习——softmax回归
softmax回归 前面介绍了线性回归模型适用于输出为连续值的情景.在另一类情景中,模型输出可以是一个像图像类别这样的离散值.对于这样的离散值预测问题,我们可以使用诸如 softmax 回归在内的分类 ...
- Linux系列(28) - 软件包简介
软件包分类 源码包(脚本安装包) 优点 开源,如果有足够的能力,可以修改源代码: 可以自由选择所需的功能: 软件是编译安装,所以更加适合自己的系统,更加稳定.效率更高: 卸载方便: 缺点 安装过程步骤 ...
- javascript 实现php str_pad
* 查看php.net官方手册 string str_pad ( string $input , int $pad_length [, string $pad_string = " &quo ...
- linux 脚本--守护进程
#/bin/bash #队列的守护进程 Date = `date +"%F-%H:%M:%S"` XMML = "/var/www/html/xiangmu" ...
- k8s-PodApi对象
init容器 pod的生命周期钩子 资源限制 podApi对象概览 apiVersion + kind 一个是版本 一个是资源组 共同确定当前yaml由谁来管理 metadata元数据 用来唯一标 ...
- 鸿蒙内核源码分析(原子操作篇) | 是谁在为原子操作保驾护航 | 百篇博客分析OpenHarmony源码 | v34.02
百篇博客系列篇.本篇为: v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航 | 51.c.h .o 本篇说清楚原子操作 读本篇之前建议先读鸿蒙内核源码分析(总目录)系列篇. 基 ...
- CF1556E-Equilibrium【栈,树状数组】
正题 题目连接:https://codeforces.com/contest/1556/problem/E 题目大意 两个长度为\(n\)的序列\(a,b\),\(q\)次询问一个区间\([l,r]\ ...
- WPF进阶技巧和实战01-小技巧
Svg在WPF中的使用 方法1:拷贝svg中的部分代码转换成Geometry(作为Path的Data使用) 在vs或者直接打开svg,看到如下代码: <?xml version="1. ...
- 轻松集成腾讯云短信服务实现短信发送(Java实现)
不论是阿里云还是腾讯云,要想在网站上实现短信发送功能,首先得保证你的网站域名是通过备案的,因为短信签名是需要用到备案过的域名截图,所以域名通过了,申请很快就会审批成功了. (说点题外话,备案的话,需要 ...
- harmony OS 开发工具安装
harmony OS 开发工具安装 安装流程 安装完成 初始配置 双击打开 Running DevEco Studio requires the npm configuration informati ...