首页 > 其他分享 >CW 11.02 模拟赛 FSYo T2

CW 11.02 模拟赛 FSYo T2

时间:2024-11-02 16:08:25浏览次数:5  
标签:pre ch FSYo min int max T2 maxn CW

算法

看到交换, 这里有一个套路:
确定最终的形态后, 交换次数即为逆序对个数
我们直接设 \(f_{i, j, k, 0 / 1 / 2}\) 表示 \(3\) 种颜色填到哪里了,最后一个是什么颜色,逆序对数最少是多少

转移分最后一个是什么颜色讨论

关于 \(O(1)\) 求逆序对的方法:

    if(i==0 && a) f[a][b][c][0] = min(f[a][b][c][0], min(f[a-1][b][c][1], f[a-1][b][c][2])+max(0, b-pre[0][a].first)+max(0, c-pre[0][a].second));
    if(i==1 && b) f[a][b][c][1] = min(f[a][b][c][1], min(f[a][b-1][c][0], f[a][b-1][c][2])+max(0, a-pre[1][b].first)+max(0, c-pre[1][b].second));
    if(i==2 && c) f[a][b][c][2] = min(f[a][b][c][2], min(f[a][b][c-1][0], f[a][b][c-1][1])+max(0, a-pre[2][c].first)+max(0, b-pre[2][c].second));

\(O(n ^ 3)\)

代码

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn = 202;
const int N = 505;
const int INF = 1e9;

int n, f[maxn][maxn][maxn][3], pos[3];
pair<int, int> pre[3][maxn];
char s[402];

inline ll read()
{
    ll x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
        {
            f = -1;
        }
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

int main()
{
    freopen("s.in", "r", stdin);
    freopen("s.out", "w", stdout);

    n = read();
    scanf("%s", s + 1);
    for (int i = 1; i <= n; i++)
    {
        if (s[i] == 'R')
            pos[0]++, pre[0][pos[0]] = make_pair(pos[1], pos[2]);
        else if (s[i] == 'G')
            pos[1]++, pre[1][pos[1]] = make_pair(pos[0], pos[2]);
        else
            pos[2]++, pre[2][pos[2]] = make_pair(pos[0], pos[1]);
    }
    memset(f, 0x3f, sizeof(f));
    if (pos[0])
        f[1][0][0][0] = 0;
    if (pos[1])
        f[0][1][0][1] = 0;
    if (pos[2])
        f[0][0][1][2] = 0;
    for (int a = 0; a <= pos[0]; a++)
    {
        for (int b = 0; b <= pos[1]; b++)
        {
            for (int c = 0; c <= pos[2]; c++)
            {
                for (int i = 0; i <= 2; i++)
                {
                    if (i == 0 && a)
                        f[a][b][c][0] = min(f[a][b][c][0], min(f[a - 1][b][c][1], f[a - 1][b][c][2]) + max(0, b - pre[0][a].first) + max(0, c - pre[0][a].second));
                    if (i == 1 && b)
                        f[a][b][c][1] = min(f[a][b][c][1], min(f[a][b - 1][c][0], f[a][b - 1][c][2]) + max(0, a - pre[1][b].first) + max(0, c - pre[1][b].second));
                    if (i == 2 && c)
                        f[a][b][c][2] = min(f[a][b][c][2], min(f[a][b][c - 1][0], f[a][b][c - 1][1]) + max(0, a - pre[2][c].first) + max(0, b - pre[2][c].second));
                }
            }
        }
    }
    printf("%d\n", min(f[pos[0]][pos[1]][pos[2]][0], min(f[pos[0]][pos[1]][pos[2]][1], f[pos[0]][pos[1]][pos[2]][2])));

    return 0;
}

总结

算套路吧(?)

逆序对求法值得学习, 类似于前缀和

标签:pre,ch,FSYo,min,int,max,T2,maxn,CW
From: https://www.cnblogs.com/YzaCsp/p/18522007

相关文章

  • CW 11.02 模拟赛 FSYo T1
    题面自出题挂个pdf题面下载算法暴力可能的答案只有\(O(n^2)\)个,考虑每个答案\(\rm{check}\)是\(O(n\logn)\)的总时间复杂度\(O(n^3\logn)\)/*O(answer*n*logn),即O(n^3logn)的算法,预期60pts*//*对于每一种可能的答案,首先对于每一个点,计算......
  • 搞人工智能开源大语言模型GPT2、Llama的正确姿势
    (如果想及时收到人工智能相关的知识更新,请点击关注!!)序言:目前我们每一小节的内容都讲解得非常慢,因为这是人工智能研发中的最基础知识。如果我们不能扎实掌握这些知识,将很难理解后续更复杂且实用的概念。因此,我们甚至采用一个概念一节的方式来编排内容,区分得清清楚楚、明明白白,以便......
  • ACWing1207_大臣的旅费(bfs)
    有一些自己的理解不知道大家能不能看懂1207.大臣的旅费-AcWing题库高质量的算法题库https://www.acwing.com/problem/content/1209/很久以前,TT 王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,TT 国的大臣们经过......
  • 【无标题】Acwing1238_日志统计(双指针)
    原题链接 :1238.日志统计-AcWing题库https://www.acwing.com/problem/content/1240/题目要求:/***小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有N行。*其中每一行的格式是:tsid表示在ts时刻编号id的帖子收到一个”赞”。*现在小明......
  • 《上海市计算机学会竞赛平台2024年8月月赛丙组题目T1 统计得分 T2 等差数列的素性 T3
    T1统计得分内存限制: 256 Mb时间限制: 1000 ms题目描述在一场知识竞赛中,选手答对一题得 11 分,答错不得分且要倒扣 11 分,但扣分不能让分数小于 00。给定一个由 Y 及 N 构成的字符序列,答对记为 Y,答错记为 N。选手一开始从 00 分开始,请输出选手最后的得分......
  • 【开源视频联动物联网平台】GB/T28181和SIP的区别
    【开源视频联动物联网平台】GB/T28181和SIP的区别-阿里云开发者社区在一些涉及系统融合的项目中,经常会有人把GB/T28181和SIP混淆,特别是在项目实施与配置的时候,视频监控联网的许多参数都被写成SIP,这让现场工程师感到困扰。 GB/T28181是专门针对视频监控联网的国家标准,为了满足......
  • 数据库管理工具Chat2DB
     Chat2DB官网地址 https://chat2db-ai.com/zh-CN/社区版下载地址  https://github.com/CodePhiliaX/Chat2DB/releases支持本地安装,网页访问,docker安装什么是Chat2DB?Chat2DB——AI驱动的下一代数据库管理和分析平台Chat2DB是一款专为现代数据驱动型企业打造的数......
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(三)SpringBoot接口统一返回和全局异常处理
    前言最近有个想法想整理一个内容比较完整springboot项目初始化Demo。SpringBoot接口统一返回和全局异常处理,使用@ControllerAdvice+ @ExceptionHandler 的组合来实现。一、pom文件新增依赖<dependency><groupId>com.alibaba</groupId>......