首页 > 其他分享 >2024.09.17模拟赛总结

2024.09.17模拟赛总结

时间:2024-09-17 12:51:23浏览次数:9  
标签:tmp cnt 17 int 2024.09 破防 flow car 模拟

破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了破防了


$ T1 $

怎么每次 $ rfy $ 模拟赛,$ T1 $ 都这么难。
想了大半场比赛,结果还没做出来,要是换成 $ T2 $ 应该能过。


$ T2 $

一直在想 $ T1 $,结果 $ T2 $ 只打了个暴力,$ T2 $ 相对 $ T1 $ 还是容易的。
设 $ f_{i, x, y} $ 表示前 $ i $ 个数,$ 1 $ 抽出 $ x $ 个,$ 2 $ 抽出 $ y $ 个的车数和最后一辆车的装载量(是 $ pair $ 类型,甚至没有看到 $ a_i = 1/2 $)。
然后转移先不考虑抽出的装载,只考虑在原序列中的装载,抽出的到最后再计算。
则 $ f_{i, x, y} = min(f_{i - 1, x - 1, y}[x > 0], f_{i - 1, x, y - 1}[y > 0], f[i - 1][x][y] + a[i]) $, $ + a_i $ 可以重载运算符一下,$ x, y $ 的范围用前缀和预处理出前 $ i $ 个数中 $ 1/2 $ 的个数。
最后答案在 $ f[n][x][y] $ 统计即可。
注意到会 $ MLE $,所以需要开个滚动数组优化一下空间。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define need(x) (bool)x.flow + x.cnt_car
#define sum(x) x.cnt_car * w + x.flow

using namespace std;

const int N = 410;

int n, w;
int a[N], sum1[N], sum2[N];
struct sb
{
    int cnt_car, flow;
} f[2][N][N];

sb operator + (sb a, int b)
{
    return {a.flow + b >= w ? a.cnt_car + 1 : a.cnt_car, a.flow + b == w ? 0 : a.flow + b > w ? b : a.flow + b};
}

sb mn(sb a, sb b)
{
    return a.cnt_car >= inf ? b : b.cnt_car >= inf ? a : sum(a) > sum(b) ? b : a;
}

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

    cin >> n >> w;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];

    for (int i = 1; i <= n; i ++ )
        sum1[i] = sum1[i - 1] + (a[i] == 1),
        sum2[i] = sum2[i - 1] + (a[i] == 2);
    // for (int i = 1; i <= n; i ++ ) cout << sum1[i] << ' ' << sum2[i] << '\n';
    memset(f, 0x3f, sizeof f);
    f[0][0][0] = {0, 0};
    for (int i = 1; i <= n; i ++ )
    {
        for (int x = 0; x <= sum1[i]; x ++ )
            for (int y = 0; y <= sum2[i]; y ++ )
            {
                f[i & 1][x][y] = {inf, inf};
                if (x && a[i] == 1) f[i & 1][x][y] = mn(f[i & 1][x][y], f[(i - 1) & 1][x - 1][y]);
                if (y && a[i] == 2) f[i & 1][x][y] = mn(f[i & 1][x][y], f[(i - 1) & 1][x][y - 1]);
                f[i & 1][x][y] = mn(f[i & 1][x][y], f[(i - 1) & 1][x][y] + a[i]);
                // cout << (f[(i - 1) & 1][x][y] + a[i]).cnt_car << '\n';
            }
    }

    // cout << inf * 10 << '\n';
    // for (int x = 0; x <= sum1[n]; x ++ )
    //     for (int y = 0; y <= sum2[n]; y ++ )
    //         cout << f[n & 1][x][y].cnt_car*w+f[n&1][x][y].flow << "\n"[y != sum2[n]];
    int res = inf, mi = inf;
    for (int x = 0; x <= sum1[n]; x ++ )
        for (int y = 0; y <= sum2[n]; y ++ )
        {
            auto tmp = f[n & 1][x][y];
            // cout << tmp.cnt_car << ' ' << tmp.flow << '\n';
            int tx = x, ty = y;
            while (tx || ty)
            {
                if (tx && (!ty || tmp.flow + 2 > w)) tx -- , tmp = tmp + 1;
                else ty -- , tmp = tmp + 2;
            }
            // cout << tmp.cnt_car << ' ' << tmp.flow << '\n';
            // cout << need(tmp) << '\n';
            if (mi > need(tmp))
            {
                mi = need(tmp);
                res = x + y;
            }
            else if (mi == need(tmp)) res = min(res, x + y);
        }

    cout << res << '\n';

    return 0;
}

$ T3 $


$ T4 $

标签:tmp,cnt,17,int,2024.09,破防,flow,car,模拟
From: https://www.cnblogs.com/MafuyuQWQ/p/18417083

相关文章

  • 全国青少年人工智能创新挑战赛 20240917_114400
    官网全国青少年人工智能创新挑战赛-首页http://aiic.china61.org.cn/编程赛项编程创作与信息学专项赛参赛手册20240917-114033编程创作与信息学专项赛资源-CSDN文库https://download.csdn.net/download/ifubing/89762000更多赛项https://share.weiyun.com/QZCw2I60......
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-17
    计算机人工智能前沿进展-大语言模型方向-2024-09-171.LargeLanguageModelsinBiomedicalandHealthInformatics:AReviewwithBibliometricAnalysisHYu,LFan,LLi,JZhou,ZMa,LXian,WHua,SHe…-JournalofHealthcare…,2024生物医学和健康信......
  • 2024/9/17 笔记
    多项式以后再写吧。首先庆祝一下把猪国杀A了[SDOI2010]猪国杀题目描述游戏背景《猪国杀》是一种多猪牌类回合制游戏,一共有\(3\)种角色:主猪,忠猪,反猪。每局游戏主猪有且只有\(1\)只,忠猪和反猪可以有多只,每只猪扮演$1$种角色。游戏目的主猪/\(\texttt{MP}\):自己存活......
  • pta重排链表(一个很清晰的实现,完全模拟链表的实现)
    #include<iostream>#include<iomanip>#include<unordered_map>#include<string>usingnamespacestd;constintN=100010;unordered_map<string,string>neStr;unordered_map<string,int>eStr;stringheadStr;intn;......
  • 程序设计题(17-24)
    第十七题题目请编写函数fun,其功能是:分别求一个双精度数的整数部分和小数部分,并通过指针返回。例如:程序输入的数为:5104.7583,则输出的整数部分是:5104,小数部分是:0.758300。#include<stdio.h>#pragmawarning(disable:4996)voidfun(doubleaa,int*x,dou......
  • 教育部等十八部门关于加强新时代中小学科学教育工作的意见 20240917_085127
    原文教育部等十八部门关于加强新时代中小学科学教育工作的意见_国务院部门文件_中国政府网https://www.gov.cn/zhengce/zhengceku/202305/content_6883615.htm概述教育部等十八部门联合发布此意见,强调要加强科学教育,推动校内校外融合,规范科技类校外培训。这一政策为少儿编程教......
  • 当年青少年学习编程的重要性 政策原文 20240917_090943
    新一代人工智能发展规划20240917_082658_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/12036071国务院关于印发全民科学素质行动规划纲要(2021—2035年)的通知20240917_083539_鲸鱼编程pyhui的技术博客_51CTO博客https://blog.51cto.com/u_13137233/12......
  • NOIP 2017 普及组初赛试题及解析(第三部分:阅读程序(3-4))
    ......
  • Day17 二叉树part07| LeetCode 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先235.二叉搜索树的最近公共祖先利用二叉搜索树的特性——有序树,可知,如果中间节点是p和q的公共节点,那个中间节点的数值一定在[p,q]区间因此,从根节点往下搜索,遇到的第一个位于[p,q]或[q,p]区间的节点就是最近公共祖先classSolution{......
  • Spread.NET 17.1.2 FOR WinForms
    Spread.NET17.1.2全球销量第一的C#.NET电子表格,拥有超过500个Excel函数在C#.NET中提供真正类似Excel的电子表格体验,且不依赖Excel。创建财务、预算/预测、科学、工程、医疗保健、保险、教育、制造和许多其他类似的业务应用程序。使用全面的API创建企业电子表......