当前位置: 首页 > news >正文

P6631 [ZJOI2020] 序列 题解

很好的贪心题。

考虑从左到右枚举每个位置,每次在右边添加一个数时更行答案。

容易想到记录当前前缀可以继续向右延伸的 \(1,2,3\) 操作的个数。记当前需要添加的数为 \(i\),用 \(c,x,y\) 分别表示可以继续向右延伸(从 \(\le i-1\) 的位置)的三种操作的个数:连续区间、奇偶性与 \(i\) 相同的位置、奇偶性与 \(i\) 不同的位置。

考察当前添加的数 \(a_i\),与 \(c+x\) 进行比较:

  • \(c+x\le a_i\),则所有经过 \(i\) 的操作都能继续向右拓展,还需要添加 \(a_i-c-x\) 个新操作。

  • 否则,需要删去 \(a_i-c-x\) 个经过 \(i\) 的操作。记 \(t=a_i-c-x\) 表示需要删除的操作数,有 \(c+x-t=a_i\),考虑将删除操作转化为添加操作。若 \(t>c\),则 \(x\) 至少删去 \(t-c\) 个,先令 \(x\leftarrow x-(t-c),t\leftarrow c\),对于 \(t>x\) 同理,加下来考虑 \(t\le\min(x,c)\) 的情况。

  • \(x\leftarrow x-t,c\leftarrow c-t\),即对两种操作都先删除 \(t\) 个,此时 \(\min(x,c)\ge 0\)\(c+x+t=a_i\),需要添加 \(t\) 个新操作,这些操作可以在 \(x,c\) 中任意选,转化为第一种情况。注意要将答案减去 \(t\)

接下来考虑怎么处理第一种情况。考察操作的性质,\(1\) 类操作可以向右拓展当且仅当 \(a_{i+1}>0\)。进行完前面的操作后 \(a_{i+1}\) 还剩 \(\max(a_{i+1}-c-y,0)\),容易想到添加 \(\min(t,\max(a_{i+1}-c-y,0))\)\(1\) 类操作,剩下的用 \(2,3\) 类处理,考虑证明这样选的总 cost 最小。

\(b=\max(a_{i+1}-c-y,0)\),将操作依次进行,假设在 \(b>0\) 时对 \(i\) 进行后两种操作。

  • 若对 \(b\) 进行了 \(1\) 类操作,则将其左端点设为 \(i\),原本 \(i\) 上的某个 \(2,3\) 类操作左端点设为 \(i+2\),一定不劣。
  • 若对 \(b\) 进行了 \(2,3\) 类操作,显然与 \(i\) 上的 \(2,3\) 类有个右端点更靠前,将前面这段替换为 \(1\) 操作,右端点后面再进行 \(2,3\) 类操作,一定不劣。

综上这个贪心是对的,于是就做完了。时间复杂度 \(\mathcal O(n)\),参考代码:

#include<bits/stdc++.h>
#define ll long long
#define mxn 100003
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define rept(i,a,b) for(int i=(a);i<(b);++i)
#define drep(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
int T,n,a[mxn];
ll ans;
signed main(){scanf("%d",&T);while(T--){scanf("%d",&n);rep(i,1,n)scanf("%d",&a[i]);ans=0;for(int i=1,c=0,x=0,y=0;i<=n;++i){if(c+x>a[i]){int t=c+x-a[i];if(t>c)x-=t-c,t=c;if(t>x)c-=t-x,t=x;x-=t,c-=t,ans-=t;}int t=a[i]-c-x;ans+=t;if(i<n){int d=min(t,max(a[i+1]-c-y,0));c+=d,x+=t-d;}swap(x,y);}cout<<ans<<'\n';}return 0;
}
http://www.sczhlp.com/news/113533/

相关文章:

  • 中山顺的网站建设如何介绍设计的网站模板下载
  • 有什么做图文长图的网站吗青岛建设网站公司
  • 广州站电话网站做app安全吗
  • 网站dedecms模板怎么查看修改啊杂志 wordpress主题
  • 计算机网站设计论文我的网站现在没有排名_我想问是不是花钱做百度推广就会有排名
  • 优秀网站设计效果图网站建设单位是什么意思
  • 网站建设确认报告济南建站都选企汇优先做后付
  • 25.9.18随笔联考总结
  • 艾辰做网站中国建设银行网站地图
  • php怎么做直播网站吗wordpress评论注册
  • 户县规划建设和住房保障局网站龙海网站开发
  • 视觉设计网站推荐怎么搭建支付网站
  • 上海阀门网站建设抓好门户网站 建设
  • 室内效果图网站网络培训注册会计师
  • 企业网站建设与网页制作表白网站在线制作软件
  • 音乐视频怎么做mp3下载网站wordpress文章内乱码
  • 网站首页被降权怎么做wordpress大学主
  • 南京网站设计公司兴田德润优惠吗怎么选择大连网站建设
  • 胶州企业网站建设中国旅游网站模板
  • app会替代网站吗网站开发需求收集 模板
  • 移动网站建设价格便宜正规的网站建设公
  • 网站文章不收录怎么办淮安哪里有做网站的人
  • 使用Windows客户端访问EDA环境的NFS共享
  • Day03-1
  • .天津网站建设thinphp 做外贸网站
  • html商务网站模板手机网站平台
  • 做微视频的网站织梦模板自适应
  • 华为手机网站建设策划方案深圳附近做个商城网站哪家公司便宜点
  • 无锡优化网站苏州h5模板建站
  • 网站建设开发合同范本南京做网站哪家最好