首页 > 其他分享 >[ABC328G] Cut and Reorder 题解

[ABC328G] Cut and Reorder 题解

时间:2024-02-03 16:23:30浏览次数:34  
标签:Cut int 题解 ABC328G include Reorder

[ABC328G] Cut and Reorder 题解

状压fw实锤

思路

观察到排列操作只会做一次,答案的编号一定是一段一段的。

所以可以考虑 \(f_s\) 表示前 \(popcount(s) + 1\) 个 \(a\) 元素,放进 \(b\) 中 \(s\) 的最小代价

转移可以考虑放置一段,每放一段需要 \(c\) 的代价。

专业看起来复杂度非常爆炸,但是仔细分析可以得到时间复杂度为 \(O(2^nn)\)。

// Problem: [ABC328G] Cut and Reorder
// Contest: Luogu
// Author: Moyou
// Copyright (c) 2024 Moyou All rights reserved.
// Date: 2024-02-03 13:29:14

#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#define int long long
using namespace std;
const int N = 22;

int n, c, f[(1 << N)], a[N], b[N];

signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> c;
    for(int i = 0; i < n; i ++) cin >> a[i];
    for(int i = 0; i < n; i ++) cin >> b[i];
    memset(f, 0x3f, sizeof f);
    f[0] = -c;
    for(int s = 0, now; s < (1 << n); s ++) {
        now = __builtin_popcount(s);
        for(int i = 0; i < n; i ++) {
            if(s >> i & 1) continue;
            int ss = s, sum = 0;
            for(int j = i; j < n; j ++) {
                if(s >> j & 1) break;
                ss |= (1 << j), sum += abs(a[now + j - i] - b[j]);
                f[ss] = min(f[ss], f[s] + sum + c);
            }
        }
    }
    cout << f[(1 << n) - 1] << '\n';

    return 0;
}

标签:Cut,int,题解,ABC328G,include,Reorder
From: https://www.cnblogs.com/MoyouSayuki/p/18004882

相关文章

  • Tree cutting
    #include<bits/stdc++.h>constintN=1e5+10,M=2*N,mod=1e9+7;usingnamespacestd;inth[N],e[M],ne[M],idx=0;intn,s,siz[N];boolst[N];voidadd(intx,inty){e[idx]=y,ne[idx]=h[x],h[x]=idx++;}voiddfs(intu,in......
  • U404643 帕鲁大陆染色的一天 题解
    题目链接:帕鲁大陆染色的一天注意到每种颜色是独立的,所以我们能够比较容易地得知每种颜色在一系列操作中的出现和消失时间。我们注意到每个操作加入以后会有两个影响,对它后面的操作显然颜色总数都会\(+1\),对前面操作的影响来说,显然会覆盖掉某些颜色,导致某些颜色消失,换句话来讲消......
  • P2178 [NOI2015] 品酒大会 题解
    P2178[NOI2015]品酒大会题解纪念一下第一道完全自己想出来的紫NOI题。思路由于r相似有单调性的性质,题目中也提示了这一点,考虑按\(height_i\)从大到小把所有相邻的\(sa\)数组内两个后缀合并,用并查集维护,发现第一问的答案就是\[\sum_{i是并查集的根}\binom{size_i}{2}......
  • P10118 『STA - R4』And 题解
    题目看到位运算,直接二进制拆分考虑。首先\(x\operatorname{AND}y=B\),设\(x=B+m\),\(y=B+n\),知道\(x+y=A\),所以设\(W=n+m=A-2\timesB\),\(y-x\)等价于\(n-m\)。因为已知\(x\operatorname{AND}y=B\),所以\(n\operatorname{AND}m=0\),着意味着在二进制下\(n\)和\(m\)不......
  • P4064 [JXOI2017] 加法 题解
    P4064[JXOI2017]加法题解思路一眼二分答案,这种区间的题很难不排序,可以考虑这个贪心check:区间左端点升序排序之后,每次遇到一个点,判断这个点是否合法,如果不合法就在所有左端点在这个点左边的区间里选择右端点最大的一个。感性证明:这个点之前的点已经保证合法了,所有左端点在......
  • AT_past202107_l 题解
    Solution题目来源:AT_past202107_l(inAtCoder|inluogu)用线段树维护区间最小值。单点修改很好写,我们看怎么区间寻找最小值位置。对于每次询问,我们先求出所查询区间\([x_i,y_i]\)的最小值\(p\),然后写一个寻找函数。对于当前区间\([l,r]\),分以下情况来看:如果当前区间长......
  • CF1542E2 题解
    一、题目描述:设$\pi(x)$为全排列$x$的逆序对数。给定$n,m$,求有多少对长度为$n$ 的排列$p,q$,使得$p$的字典序小于$q$,且$\pi(p)>\pi(q)$答案对$m$取模。数据范围:$1\len\le500,1\lem\le10^9$。 二、解题思路:一开始列出计算式个人感觉是......
  • 230718B3-path 题解
    感谢cn_ryh大佬的怂恿(否则我真不会动这个题感谢cszhpdx的指导帮助qwq(让我们膜拜一下场切的浩杨哥orz解决这个题让人很有成就感(题意给定一个基环树,边有长度l、限速v、价值w(每单位时间)已知起点s、终点t、最高速度u,求最小花费边数、询问次数$10^5$解法首先学习一下基......
  • 基于客户真实使用场景的云剪辑Timeline问题解答与代码实操
    本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第6期,从客户真实实践场景出发,分享一些Timeline小技巧(AI_TTS、主轨道、素材对齐),助力客户降低开发时间与成本。欧叔|作者故事的开始要从一条客户的真实反馈说起。  Round1:视频比音频长,怎么办?某天,一位客户加入了智能媒......
  • 盘点那些硬件+项目学习套件:Hi3861鸿蒙开发板及入门常见问题解答
    华清远见20岁了~过去3年里,华清远见研发中心针对个人开发板业务,打造了多款硬件+项目学习套件,涉及STM32单片机、嵌入式、物联网、人工智能、鸿蒙、ESP32、阿里云IoT等多技术方向。今天我们来盘点一下,比较受欢迎几款“硬件+项目”学习套件,以及一些初学者比较关注的问题。盘点二:Hi3861......