首页 > 其他分享 >2024_CCPC网络赛I题

2024_CCPC网络赛I题

时间:2024-09-18 12:38:53浏览次数:9  
标签:选择 int sum CCPC 网络 2024 物品 可以 dp

2024_CCPC网络赛I题

题目链接

思路

  • time为1s,n==200,可以\(n^3\)做法。

  • 可以想到枚举每一个时间间隔。原先的思路是对于每一个确定的时间,比如x,通过某种dp求出来时间为x的时候的方案数目。所以比赛的时候一直卡在这里没做出来。

  • 有一个小trick:
    当我们在枚举某一个变量统计结果的时候,我们需要之后刚刚好这个变量为x的时候的结果,可以考虑求解出来所有\(>=x\)的结果,在求解出来所有\(>=(x+1)\)的结果,进行差分可以得到刚好等于x的结果
    也就是用差分的思想来代替原先的刚好等于的情况。
    同时也可以使用\(<=\)。

  • 使用了上面的trick之后,处理对于每一个变量x如何求解方案数目。
    状态转移方程:首先可以想到,\(dp[i][j]\)表示前i个人,选择了\(j\)个物品的方案数目。是选择了j件,如果想要表示在前j件里面做了什么事情,还要有新的维度。
    对于当前的时间间隔d,只要物品和人物的时间间隔\(>=d\),这个人就可以选择这个物品。可以先使用sum[]数组,预处理出来每一个人有多少种选择。

    对于第i个人,可以选择的物品的坐标区间是\([0,pos_1]\),对于第i+1个人可以选择的物品的位置的区间:\([0,pos_2]\)。

    pos2一定大于等于pos1,也就是前一个人可以选择的区间,一定是后一个人的子集。

    5的选择一定是6里面的选择。

  • 方程转移:
    对于\(dp[i][j]\)。首先一种方式就是

    \[dp[i][j] += dp[i-1][j] \]

  • 另外一种:第i个人选择一件物品:

    \[dp[i][j] += dp[i-1][j-1] * (sum[i] - (j-1)) \]

    \(dp[i-1][j-1]\)是前i-1个人一共选择了j-1件物品,\(sum[i] - (j-1)\)是当前第i个人还有多少个自己可以选择。两者是相乘的关系。(组合数学的内容)。

  • 最后统计一下答案就好了,细节在代码的注释里面。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
const int N = 505;
int a[N], b[N];
int g[N];//表示 d >= x 的方案数目。
int sum[N];//sum[i] 表示 在d确定的时候 第i个人 可以拿的所有的行李数目
int f[N][N];//表示在某一个d的情况下,前i个人 拿了j件行李的方案数目。
void solve()
{
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int j = 1; j <= m; j++) cin >> b[j];
    sort(a + 1, a + 1 + n);
    sort(b + 1, b + 1 + m);
    int ans = 0;

    for(int d = 0; d <= 500; d++)
    {

        for(int i = 0; i <= m; i++) sum[i] = 0;

        for(int i = 1; i <= m; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(b[i] - a[j] >= d) sum[i]++;
            }
        }

        for(int i = 0; i <= m; i++)
        {
            for(int j = 0; j <= n; j++)
            {
                f[i][j] = 0;
            }
        }

        for(int i = 0; i <= m; i++)
        {
            f[i][0] = 1;
        }

        for(int i = 1; i <= m; i++)
        {
            for(int j = 1; j <= min(n, sum[i]); j++)
            {
                f[i][j] = (f[i][j] + f[i - 1][j]) % mod;

                f[i][j] = (f[i][j] + f[i - 1][j - 1] *  (sum[i] - (j - 1))) % mod;
            }
        }

        for(int j = 1; j <= n; j++)
        {
            g[d] = f[n][j] + g[d];
            g[d] %= mod;
        }
    }

    for(int d = 0; d + 1 <= 500; d++)
    {
        ans = (ans + (g[d] - g[d + 1]) * d) % mod;
        ans %= mod;
    }
    cout << ans << "\n";
}

signed main()
{
    solve();
    return 0;
}

提一下边界情况:
很明显,最后添加答案的时候,必须要存在至少一件物品被选择。所以统计\(g[d]\),也就是时间大于等于d的方案数的时候,直接从\(f[n][1]\)开始添加。
但是其实,就算从\(f[n][0]\)开始也是一样的,因为如果都用了\(f[n][0]\),后面的差分会把这种情况自动消除。不过在实际意义上就会不好理解。
以及,这个题目,用\(f[i][0]== 1\)赋初值很好理解,如果不想这样,就需要自己加特判手动更新\(f[i][1]\)。然后转移方程从j = 2开始就好了。

标签:选择,int,sum,CCPC,网络,2024,物品,可以,dp
From: https://www.cnblogs.com/dhu-gxy/p/18418234

相关文章

  • 2024 CCPC 网赛题解
    G最大流#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#defineMAXN205#defineINF0x3f3f3f3f3f3f3f3f#defineLLlonglong#defineIntregisterintusingnamespacestd;inlinevo......
  • GEE 案例:利用2001-2024年的MODIS数据长时序ndvi指数归一化后的结果分析
    目录简介指数数据代码结果简介利用2001-2024年的MODIS数据长时序ndvi指数归一化后的结果分析,并加载时序图。指数NDVI指数(NormalizedDifferenceVegetationIndex)是用来评估地表植被覆盖度和健康程度的指数。它通过计算红光和近红外光反射率的差异来衡量植被的光合......
  • 【笔记】网络流量异常检测概览
    异常流量监控和拒绝服务方法研究对于保障路由器通信安全至关重要。传统的网络安全技术(例如系统入侵检测、防病毒软件、防火墙之类的)对于DDos类的攻击无法很好地防范。网络层安全研究的是什么?跟之前的声光电磁层不同,声光电磁实质上是物理层信息传输的介质,而网络层安全主要关注的......
  • 20240918_114105 mysql 认识索引
    关于索引MySQL的索引是数据库管理系统中用于提高数据检索效率的一种数据结构。MySQL支持多种类型的索引,每种索引都有其特定的用途和优化方式。以下是MySQL中常见的几种索引类型:1.主键索引(PrimaryKeyIndex)定义:主键索引是一种特殊的唯一索引,它不允许有NULL值,且表中每一行数据......
  • 第九章,网络编程
    高级编程文章目录高级编程第九章,网络编程一,概述二,IP地址三,网络通信四,Socket简介第九章,网络编程一,概述计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和......
  • 海南2024下半年软考准考证打印时间11月4日开始
    根据2024下半年海南软考考务通知的说明,2024下半年海南软考准考证打印相关事项如下:一、2024下半年海南软考准考证打印时间2024年11月4日-11月12日。二、2024下半年海南软考准考证打印入口网址海南2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.ruankao.org.......
  • 2024.9.18训练记录
    订正昨天早上的模拟赛T1还没做,dp写法好像要记录什么的感觉好麻烦T2考试没做出来,其实是挺裸的dp状态记pair<int,int>\(f[i][j][k]\)表示前\(i\)个物品,拉出来\(j\)个\(1\),\(k\)个\(2\)所需要的\({背包数,最后一个背包剩的空间}\)。可以分讨最后这一位是否被拉出......
  • 职场人该如何学习使用AI大模型,都2024年还不会用AI办公的你真的out了!
    【写在开篇:这是一篇针对非技术背景的职场人,学习和使用AI大模型的完全攻略。】非技术背景的职场人想要学习和使用AI大模型,可以遵循以下步骤:1.基础学习:首先,需要掌握人工智能的基础知识,包括但不限于机器学习、深度学习等领域。可以通过阅读《ArtificialIntelligence:AMod......
  • 江西2024下半年软考准考证打印时间11月4日9点后开始
    根据2024下半年江西软考考务通知的说明,2024下半年江西软考准考证打印相关事项如下:一、2024下半年江西软考准考证打印时间2024年11月4日9点-11月12日8点30分。二、2024下半年江西软考准考证打印入口网址江西2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.r......
  • 山东2024下半年软考准考证打印时间11月5日9点后开始
    根据2024下半年山东软考考务通知的说明,2024下半年山东软考准考证打印相关事项如下:一、2024下半年山东软考准考证打印时间2024年11月5日9:00。二、2024下半年山东软考准考证打印入口网址山东2024年下半年软考准考证打印入口:中国计算机技术职业资格网(https://www.ruankao.org.cn/)......