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

AT_abc328_g Cut and Reorder 题解

AT_abc328_g Cut and Reorder

非常好的状压 DP 题目!

思路

手推一下,发现第一个操作只会进行一次,进行多次不会比进行一次更优。

假设我们已经进行过第一个操作了,那么代价就是第一个操作的代价加上 $\sum_{i=1}^{N} \left | A_{i}-B_{i} \right | $。现在关键是想怎么进行第一个操作。

数据范围不简单,显然是状压的范围。

我们可以考虑把 AAA 的元素分成一段一段放到目标位置上,设 dpidp_{i}dpi 表示 iii 状态下的最小代价,其中 iii 是一个二进制数,每一位 111 表示已经放上元素了,被占用了,000 表示还没有放上元素。如果 iii 中有 sisisi111,那么就表示把 (A1,A2,…,Asi)(A_{1},A_{2},\dots ,A_{si})(A1,A2,,Asi) 加入到被占用的位置上,不一定要按顺序。

我们用刷表法更新,即用已知去更新未知。

我们可以枚举 iii 中未被占用的位置,假设新的一段从这里插入,那么我们顺次枚举插入多少元素更新新的状态。

memset(dp,127,sizeof(dp));
dp[0]=0;
for(int i=0;i<(1<<n);i++)
{int si=0;//i中1的个数for(int j=0;j<n;j++)if(i&(1<<j)) si++;for(int j=0;j<n;j++)if(!(i&(1<<j))){long long sum=c,now=si+1;int f=i;for(int k=j;k<n;k++)if(!(i&(1<<k))){sum+=abs(a[now++]-b[k+1]);f|=(1<<k);dp[f]=min(dp[f],dp[i]+sum);}else break;//否则就加不进去了}
}

时间复杂度 O(2NN)O(2^NN)O(2NN),空间复杂度 O(2N)O(2^N)O(2N)

时间复杂度的证明

看似是 O(2NN2)O(2^NN^2)O(2NN2),实则不然。

我们发现内层的 jjjkkk 实际上是在枚举子段,假设子段长度为 lll,则其出现 2N−l(N−l+1)2^{N-l}(N-l+1)2Nl(Nl+1) 次,则总复杂度为 ∑l=1N2N−l(N−l+1)≈∑l=1N2N−lN=(2N−1)N\sum_{l=1}^{N}2^{N-l}(N-l+1) \approx \sum_{l=1}^{N}2^{N-l}N=(2^N-1)Nl=1N2Nl(Nl+1)l=1N2NlN=(2N1)N

故时间复杂度为 O(2NN)O(2^NN)O(2NN)

代码

#include<bits/stdc++.h>
using namespace std;
int n;
long long dp[1<<22];
long long a[23],b[23],c;
int main()
{ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>c;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>b[i];memset(dp,127,sizeof(dp));dp[0]=0;for(int i=0;i<(1<<n);i++){int si=0;//i中1的个数for(int j=0;j<n;j++)if(i&(1<<j)) si++;for(int j=0;j<n;j++)if(!(i&(1<<j))){long long sum=c,now=si+1;int f=i;for(int k=j;k<n;k++)if(!(i&(1<<k))){sum+=abs(a[now++]-b[k+1]);f|=(1<<k);dp[f]=min(dp[f],dp[i]+sum);}else break;//否则就加不进去了}}cout<<dp[(1<<n)-1]-c;//实际上i段需要(i-1)个c,所以我们多算了一个creturn 0;
}
http://www.dtcms.com/a/438846.html

相关文章:

  • 怎样把自己的网站进行推广国际国内时事新闻
  • 为什么isis比ospf更具有扩展性
  • Windows 10系统编程——进程专题:枚举我们进程的状态
  • 【开题答辩实录分享】以《基于协同过滤算法的经济型酒店推荐系统》为例进行答辩实录分享
  • 湘潭网站建设 都来磐石网络wordpress首页设计
  • labelme 创建AI多边形功能
  • 生物信息 R语言和 cytoscape 相互沟通的组件RCy3,构建cytoscape网络表 节点类型表 链接边的表,并推送到cytoscape
  • 你们需要网站建设怎么注销公司法人身份
  • 序列化和反序列化(redis为例)
  • 之江汇学校网站建设wordpress 不显示评论
  • 洛谷 - 背包题目详解(超详细版)
  • 自主进化的AI大模型架构设想(解决大模型时效性问题):知识网络的拓扑设计
  • 网站建设所需费用明细应不应该购买老域名建设新网站
  • 突破传统!基于SAM架构的双模态图像分割:让AI“看见“红外与可见光的完美融合
  • Agentic Schemas:构建未来多智能体协作架构的实践蓝图
  • 血玥珏-MIDI音符合理性筛选处理器 v1.0.0.6 使用说明
  • 网站建设维诺之星抖音seo排名源码
  • 深入理解:Rust 的内存模型
  • 深圳建站公司推荐宣传片制作费用报价表
  • Zig 语言通用代码生成器:逻辑冒烟测试版五,数据库自动反射功能
  • 基于 GEE 制作研究区遥感影像可用性地图
  • 微PE | 辅助安装Window系统
  • 企业网站怎么维护易语言做试用点击网站
  • (单调栈)洛谷 P6875 COCI 2013/2014 KRUŽNICE 题解
  • 地图网站怎么做中国的外贸企业有哪些
  • 外贸公司网站怎么设计更好单页响应式网站模板
  • 恒生电子面经准备
  • 电视剧在线观看完整版免费网站网友让你建网站做商城
  • 大学网站群建设方案设计网名姓氏
  • Qt 按钮点击事件全链路解析:从系统驱动到槽函数