F1. Counting Is Fun (Easy Version)

Counting Is Fun (Easy Version)

题意

一个长度为 m m m的数组b成为是good的,当且仅当通过执行下面这个操作若干次可以让数组b中所有元素变成 0 0 0

  • 选择两个不同的下标 l l l r r r,其中 ( 1 ≤ l < r ≤ m ) (1 \leq l < r \leq m) (1l<rm),然后 b i ( l ≤ i ≤ r ) b_{i}(l \leq i \leq r) bi(lir)所有元素减 1 1 1

给定n,k,p,n为数组长度,k为数组中每个元素的取值范围为 [ 0 , k ] [0,k] [0,k],p为模数,求在 ( k + 1 ) n (k+1)^{n} (k+1)n个数组里有多少个数组是good的

分析

首先观察到 l l l是不能等于 r r r的,即一次操作最少有两个元素进行减1,所以差分数组就需要选择一对 ( i , j ) (i,j) (i,j),其中 ( i + 2 ≤ j ) (i+2 \leq j) (i+2j),令原数组为 a a a,差分数组为 b b b,一次操作也就是找到一对 ( i , j ) (i,j) (i,j) b i − 1 b_{i}-1 bi1 b j + 1 b_{j}+1 bj+1,要让所有元素都为0,差分数组所有元素也得是0,所以充要条件就是, b i + ∑ j = 1 i − 2 b j ≥ 0 ⇔ a i − a i − 1 + a i − 2 ≥ 0 b_{i}+\sum_{j=1}^{i-2} b_{j} \geq 0 \Leftrightarrow a_{i}-a_{i-1}+a_{i-2} \geq 0 bi+j=1i2bj0aiai1+ai20,若某个时刻 b i < 0 b_{i}<0 bi<0 b 1 . . . b i − 2 > 0 b_{1}...b_{i-2}>0 b1...bi2>0一定是不合法的。

那么就可以用设计dp状态统计方案数了,根据数据范围,最大可以到 n 3 n^{3} n3,设 d p i , j , k dp_{i,j,k} dpi,j,k为到第 i i i个为止, a i − 1 = j a_{i-1}=j ai1=j a i = k a_{i}=k ai=k时符合条件的方案数,转移就是 d p i , j , k ← ( d p i , j , k + d p i − 1 , l , j ) % p dp_{i,j,k} \leftarrow (dp_{i,j,k}+dp_{i-1,l,j})\%p dpi,j,k(dpi,j,k+dpi1,l,j)%p,其中 a i − 2 = l , k ≥ m a x ( 0 , j − l ) a_{i-2}=l,k \geq max(0,j-l) ai2=l,kmax(0,jl),由此可以发现枚举 i , j , k i,j,k i,j,k就已经时 n 3 n^{3} n3级别,再考虑优化转移,发现可以考虑后缀和使得转移可以 O ( 1 ) O(1) O(1)进行,因为转移的时候考虑的都是 k ≥ m a x ( 0 , j − l ) k \geq max(0,j-l) kmax(0,jl)的部分

代码

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int dp1[410][410][410], dp2[410][410][410];
void Solve() {
    int n, k, mod;
    cin >> n >> k >> mod;
    dp1[0][0][0] = 1;
    for (int i = 0; i <= k; i++) {
        dp2[0][i][0] = 1;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= k; j++) {
            for (int l = 0; l <= k; l++) {
                if (i == 1) {
                    for (int ll = 0; ll <= k; ll++) {
                        dp1[i][j][l] = (dp1[i - 1][ll][j] + dp1[i][j][l]) % mod;
                    }
                } else {
                    dp1[i][j][l] = (dp1[i][j][l] + dp2[i - 1][max(0, j - l)][j]) % mod;
                }
            }
        }
        for (int j = k; j >= 0; j--) {
            for (int l = 0; l <= k; l++) {
                dp2[i][j][l] = dp1[i][j][l];
                if (j + 1 <= k) {
                    dp2[i][j][l] = (dp2[i][j][l] + dp2[i][j + 1][l]) % mod;
                }
            }
        }
    }
    LL ans = 0;
    for (int i = 0; i <= k; i++) {
        for (int j = 0; j <= i; j++) {
            ans = (ans + dp1[n][i][j]) % mod;
        }
    }
    cout << ans << '\n';
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= k; j++) {
            for (int l = 0; l <= k; l++) {
                dp1[i][j][l] = dp2[i][j][l] = 0;
            }
        }
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T;
    cin >> T;
    while (T--) {
        Solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/496515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电平输入检测-定时器输入捕获

目录 一&#xff0c;引入 二&#xff0c;具体结构 三&#xff0c;实现步骤 四&#xff0c;PWM输入模式 一&#xff0c;引入 上篇博客&#xff0c;我们对于定时器的计数核心——时基单元作了细致的了解。这篇博文&#xff0c;我们来介绍定时器的四大功能模块之一——输入捕获…

Python基本运算

1.逻辑运算符 第四行会有黄色的下划线是因为这个不是系统推荐的写法&#xff0c;系统推荐的是第五行的链式比较&#xff1b; 2.短路求值 对于and而言&#xff0c;左边的语句是false&#xff0c;那么整体一定是false,右边的表达式就不会进行计算&#xff1b; 对于or而言&…

ChatGLM3:AttributeError_ can‘t set attribute ‘eos_token‘

最近在微调 ChatGLM3-6b 时&#xff0c;训练好模型之后&#xff0c;调用inference_hf.py函数验证模型的时候报了如下错误&#xff0c;下面是解决方案。 我在训练时使用的是ptuning_v2.yaml配置文件&#xff0c;训练运行代码如下&#xff1a; CUDA_VISIBLE_DEVICES1 python fi…

C++取经之路(其二)——含数重载,引用。

含数重载: 函数重载是指&#xff1a;在c中&#xff0c;在同一作用域&#xff0c;函数名相同&#xff0c;形参列表不相同(参数个数&#xff0c;或类型&#xff0c;或顺序)不同&#xff0c;C语言不支持。 举几个例子&#xff1a; 1.参数类型不同 int Add(int left, int right)…

智慧酒店(一):EasyCVR酒店安防视频监控系统的搭建与特点分析

一、行业背景 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;智慧酒店作为现代酒店业的重要发展方向&#xff0c;人工智能的应用显得尤为重要。数据显示&#xff0c;全国智慧酒店每年以10%—15%的速度快速增长&a…

大型DMP系统

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这是我作为学习笔记总结应用篇第一篇&#xff0c;本章大量的参考了别的博主的文章。 我们今天就先从搭建一个大型的 DMP 系统开始&#xff0c;利用组成原理里面学到的存储器知识&#xff0c;来做选型判断&#xff0c;从而更…

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…

短视频矩阵系统--技术3年源头迭代

短视频矩阵系统核心技术算法主要包括以下几个方面&#xff1a; 1. 视频剪辑&#xff1a;通过剪辑工具或API从各大短视频平台抓取符合要求的视频。这些视频通常符合某些特定条件&#xff0c;如特定关键词、特定时间段发布的视频、视频点赞评论转发等数据表现良好的视频。 2. 视…

揭露非法集资陷阱!

常见的非法集资手法 犯罪分子利用了社会公众的哪些心理&#xff1f; 使用了怎样的措辞&#xff1f; 一起来揭露非法资金集聚的几个陷阱&#xff01; 拐弯抹角地向亲朋好友承诺大额回报&#xff0c;希望他们加入&#xff08;利用社会认同原则&#xff09;。 不法分子造了个传…

pygame用chatgpt绘制3d沿x轴旋转的

import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 0), (100, 200, 0), (300, 100, 0)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…

UDP send 出现大量“Resource temporarily unavailable”

背景 最近排查用户现场环境&#xff0c;查看日志出现大量的“send: Resource temporarily unavailable”错误&#xff0c;UDP设置NO_BLOCK模式&#xff0c;send又发生在进程上下文&#xff0c;并且还设置了SO_SNDBUF 为8M&#xff0c;在此情况下为什么还会出现发送队列满的情况…

iOS —— 初识KVO

iOS —— 初始KVO KVO的基础1. KVO概念2. KVO使用步骤注册KVO监听实现KVO监听销毁KVO监听 3. KVO基本用法4. KVO传值禁止KVO的方法 注意事项&#xff1a; KVO的基础 1. KVO概念 KVO是一种开发模式&#xff0c;它的全称是Key-Value Observing (观察者模式) 是苹果Fundation框架…

蓝桥备赛——DFS

废话不多说&#xff0c;先上题 对应代码如下&#xff1a; def dfs(x,y):global numfor i in range(0,4):dir[(-1,0),(0,-1),(1,0),(0,1)]nx,nyxdir[i][0] ,ydir[i][1]if nx<0 or nx>hx or ny <0 or ny>wy: continueif mp[nx][ny]*:num1print("%d:%s->%d%…

ROS 2边学边练(3)-- 何为节点(nodes)

在接触节点这个概念之前&#xff0c;我们先来看看下面这张动态图&#xff0c;更方便我们理解一些概念和交互过程。 &#xff08;相信大家的英文基础哈&#xff09; 概念 如上图所示&#xff0c;这里面其实涉及到了三个概念&#xff08;功能&#xff09;&#xff0c;分别是节点…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

009——服务器开发环境搭建及开发方法(上)

目录 一、环境搭建 1.1网络环境 1.2 文件传输环境搭建 1.2.1 nfs环境 1.2.2 tftp环境 1.3 源码环境搭建 1.4 代码托管 1.5 配置交叉编译工具链 二、 开发方式 2.1 内核、设备树、驱动 make mrproper make 100ask_imx6ull_mini_defconfig​编辑 make zImage -j4 m…

Kubernetes Gateway API 介绍

Kubernetes Gateway API 诞生背景 在 kubernetes 中&#xff0c;流量的治理主要分为两个部分&#xff1a; 南北向流量东西向流量 南北向流量&#xff08;NORTH-SOUTH traffic&#xff09; 在计算机网络中&#xff0c;南北向流量通常指数据流量从一个**内部网络&#xff08;…

结构数列演化中的分枝

假设一个6*6的平面&#xff0c;这个平面的行和列可以自由的变换。 已知一个4点的结构数列顺序为 9 1 10 6 16 14 5 15 8 12 11 13 7 2 4 3 让这个数列按照4-5-4的方式演化 得到顺序为 1 9 1 10 6 16 14 5 15 8 12 11 13 7 2 4 3 2 16 6 9…

无需插件就能实现异构数据库的互联互通?(powershell妙用)

前两天在DBA群里有大佬分享了利用Oracle Database Gateway&#xff08;透明网关&#xff09;实现sqlserver和oracle 的数据交互&#xff0c;这里让我想到前些年写的一些powershell脚本用来做sqlserver和oracle的数据交互&#xff0c;powershell是windows自带的一个脚本工具&…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…