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

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. 机器学习——主成分分析(PCA)

    1 前言 PCA(Principal Component Analysis)是一种常用的无监督学习方法,是一种常用的数据分析方法. PCA 通过利用 正交变换 把由 线性相关变量 表示的观测数据转换为 ...

  2. 如何点击穿透Electron不规则窗体的透明区域

    实现一个不规则窗体 这里我们实现一个圆形窗体,实现其他形状的窗体与这个方法类似. 首先,把窗口的高度(height)和宽度(width)值修改为相同的值,使窗口成为一个正方形. 其次,把窗口的透明属性 ...

  3. webpack learn1-初始化项目1

    使用Visual  Studio Code软件使用准备,先安装一些插件,加快开发效率(还有Language Packs 选择简体中文安装后重启软件,可切换为中文): 下面是项目初始化步骤: 1 软件打 ...

  4. TP5更新数据成功,但判断结果不符

    thinkphp的CURD中,使用save方法时会出现一个奇怪的问题,即如果数据没有更新(与原数据相同),返回值判断为false.其实很久之前就发现了这个问题,一度以为是官方代码的问题,但是一直拖延到 ...

  5. Docker系列(12)- 部署Tomcat

    #官方的使用:我们之前的启动都是后台,停止容器后,容器还是可以看到#docker run -it --rm,一般用来测试,用完就会删除容器,镜像还在[root@localhost ~]# docker ...

  6. Centos8.X 搭建Prometheus+node_exporter+Grafana实时监控平台

    Prometheus Promtheus是一个时间序列数据库,其采集的数据会以文件的形式存储在本地中,因此项目目录下需要一个data目录,需要我们自己创建,下面会讲到 下载 下载好的.tar.gz包放 ...

  7. chrome 的手机调试工具 toggle device toolbar

    chrome 的手机调试工具 toggle device toolbar 是否可以模拟到不同系统,如苹果系统和安卓系统.

  8. HTML在网页上不能显示图片问题

    我遇到的问题是写了一个HTML程序,结果在网页上面不能显示,原因是图片路径放置错了. 修改前代码: <!DOCTYPE html> <html> <head> &l ...

  9. Centos7 安装 .Net Core2.2

    添加 rpm 源 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm 开始 ...

  10. YbtOJ#662-交通运输【线段树合并,树状数组】

    正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/2 题目大意 给出\(n\)个点的一棵有根树,对于每个\(x\)求,删除点\(x\)后修改某个点 ...