Acwing---1214.波动数列

news2025/1/21 2:51:36

波动数列

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

观察这个数列:

1 3 0 2 -1 1 -2 …

这个数列中后一项总是比前一项增加2或者减少3,且每一项都为整数。

栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种呢?

输入格式
共一行,包含四个整数 n,s,a,b,含义如前面所述。

输出格式
共一行,包含一个整数,表示满足条件的方案数。

由于这个数很大,请输出方案数除以 100000007 的余数。

数据范围
1 ≤ n ≤ 1000 , 1≤n≤1000, 1n1000,
− 1 0 9 ≤ s ≤ 1 0 9 , −10^9≤s≤10^9, 109s109,
1 ≤ a , b ≤ 1 0 6 1≤a,b≤10^6 1a,b106

输入样例:

4 10 2 3

输出样例:

2

样例解释

两个满足条件的数列分别是2 4 1 3和7 4 1 -2。

2.基本思想

DP

分析

设第一个数为 x x x,则第二个数为 x + d 1 x+d1 x+d1,第三个数为 x + d 1 + d 2 … x+d1+d2 … x+d1+d2,(这里的 d 1 , d 2 d1,d2 d1d2表示 a a a或者 − b −b b,)则长度为n的

序列所有的项为:

x , x + d 1 , x + d 1 + d 2 , x + d 1 + d 2 + d 3 , … , x + d 1 + d 2 + … + d n − 1 x, x+d1, x+d1+d2, x+d1+d2+d3, …, x+d1+d2+…+dn−1 x,x+d1,x+d1+d2,x+d1+d2+d3,,x+d1+d2++dn1,又因为数列之和为s,所以转化成:

n ∗ x + ( n − 1 ) ∗ d 1 + ( n − 2 ) ∗ d 2 + ( n − 3 ) ∗ d 3 + … + d n − 1 = s n∗x+(n−1)∗d1+(n−2)∗d2+(n−3)∗d3+…+dn−1=s nx+(n1)d1+(n2)d2+(n3)d3++dn1=s,再在一步转化:

在这里插入图片描述

因为x是任意整数,所以 ( s − ( ( n − 1 ) d 1 + ( n − 2 ) d 2 + ( n − 3 ) d 3 + … + d n − 1 ) ) (s−((n−1)d1+(n−2)d2+(n−3)d3+…+dn−1)) % n (s((n1)d1+(n2)d2+(n3)d3++dn1))一定为 0 ,

因此推出 s s % n == (n−1)d1+(n−2)d2+(n−3)d3+…+dn−1的和 % n s

也就是两者的模 n n n的余数必须相同;

s s s是确定的,即最后就是要求 ( n − 1 ) d 1 + ( n − 2 ) d 2 + ( n − 3 ) d 3 + … + d n − 1 (n−1)d1+(n−2)d2+(n−3)d3+…+dn−1 (n1)d1+(n2)d2+(n3)d3++dn1这个式子的所有可能的和模 n n n的余数是 s s%n s的结果数

到这里就转化成了组合问题。

动态规划
1.状态表示:

1.1集合: f [ i ] [ j ] f[i][j] f[i][j]:所有只考虑前i项取(a-b)且当前i个数的总和除以 n n n的余数是 j j j的方案的集合的数量
1.2属性:count

2.状态计算
在这里插入图片描述
递推关系:第i个可以选a或者-b
i个选a,则前i个数的和为:
[ ( n − 1 ) d 1 + ( n − 2 ) d 2 + … + ( n − ( i − 1 ) ) d i − 1 + ( n − i ) a ] [(n−1)d1 +(n−2)d2 +…+(n−(i−1))di−1+(n−i)a] [(n1)d1+(n2)d2++(n(i1))di1+(ni)a]%n≡j%n
( n − 1 ) d 1 + ( n − 2 ) d 2 + … + ( n − ( i − 1 ) ) d i − 1 ≡ j − ( n − i ) a (n−1)d1 +(n−2)d2 +…+(n−(i−1))di−1≡j−(n−i)a (n1)d1+(n2)d2++(n(i1))di1j(ni)a
因为 f [ i ] [ j ] f[i][j] f[i][j]代表的是组合数量,因为 j − ( n − i ) a j-(n-i)a j(ni)a是已经确定的数值,所以变化的数量在前面的和里面,可以推出
所以 f [ i ] [ j ] = f [ i − 1 ] [ j − a ( n − i ) ] f[i][j]=f[i−1][j−a(n−i)] f[i][j]=f[i1][ja(ni)]
同理,如果选 − b , f [ i ] [ j ] = f [ i − 1 ] [ j + b ( n − i ) ] -b, f[i][j]=f[i−1][j+b(n−i)] b,f[i][j]=f[i1][j+b(ni)]
f [ i ] [ j ] = f [ i − 1 ] [ j + b ( n − i ) ] + f [ i − 1 ] [ j − a ( n − i ) ] f[i][j]=f[i−1][j+b(n−i)]+f[i−1][j−a(n−i)] f[i][j]=f[i1][j+b(ni)]+f[i1][ja(ni)]

3.代码实现

import java.util.Scanner;

public class _1214波动数列 {
    static Scanner sc = new Scanner(System.in);
    static int MOD = 100000007;
    static int dp[][] = new int[1010][1010];

    public static void main(String[] args) {
        int n = sc.nextInt();
        int s = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();

        //初始化
        dp[0][0] = 1;
        
        for (int i = 1; i <= n; i++)//枚举所有状态
            for (int j = 0; j < n; j++)//枚举余数
                dp[i][j] = (dp[i - 1][get_mod(j-(n-i)*a,n)] + dp[i - 1][get_mod(j+(n-i)*b,n)]) % MOD;
        System.out.println(dp[n - 1][s % n]);
    }

    static int get_mod(int a, int b) {//求 a除以b的正余数
        return (a % b + b) % b;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Grafana配置sqlserver,展示数据

Grafana配置sqlserver&#xff0c;展示数据1. 连接数据源2. Visualization2.1 时间表达式2.2 Graph2.2.1 Example with metric column2.2.2 convert null values to be zero instead2.2.3 Using multiple columns3. AwakeningGrafana Document: https://grafana.com/docs/grafa…

java MultipartFile+vue+element 批量上传文件、图片,与普通数据同时提交保存才上传到后端

一.背景 文件上传项目可参考&#xff1a;点击预览 1.最简单也是最普遍的做法是form表单提交&#xff0c;其实前端提交到后端也是难以离开form表单提交&#xff0c; 一般有两种方式来处理文件、图片上传&#xff1a; 先上传&#xff0c;获取返回路径&#xff0c;再整个表单提…

PyTorch实现基本的线性回归

线性回归理论知识参考文章&#xff1a;线性回归 下面我们将从零开始实现整个线性回归方法&#xff0c; 包括数据集生成、模型、损失函数和小批量随机梯度下降优化器。 1.导入 %matplotlib inline import random import torch from d2l import torch as d2l2.生成数据集 我们…

js垃圾回收(引用计数算法、标记清除算法、v8垃圾回收机制、浏览器性能监控、任务管理器、内存分析、JSBench)

目录 垃圾 可达对象 GC算法&#xff08;垃圾回收机制&#xff09; 引用计数算法 优点 缺点 标记清除算法 优点 缺点 标记整理算法 优点 缺点 V8 V8垃圾回收 新生代对象回收 晋升条件 老生代对象回收 性能监控Performance 浏览器任务管理器 内存分析 ​编…

Apache Doris 系列: 基础篇-BitMap索引

1. 测试数据准备 本文使用SSB&#xff08;Star-Schema-Benchmark&#xff09;的测试数据&#xff0c;读者也可以自行准备测试数据 1.1 编译ssb-dbgen 数据生成工具 ## 拉取Apache Doris源代码 git clone https://github.com/apache/doris.git## 编译ssb-dbgen cd doris/tool…

计算机网络复习之应用层

统一资源定位系统&#xff08;uniform resource locator;URL&#xff09;是因特网的万维网服务程序上用于指定信息位置的表示方法。它最初是由蒂姆伯纳斯李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738。邮局协议&#xff08;Post Office Protoco…

TDemo 备注文本的二种存贮方式

TDemo 备注纯文本的二种存贮方式 数据库使用过程中&#xff0c;对于TDeme控件&#xff0c;对应数据库的分为nvarchar(n)类型字段。 一、通常使用二种格式的文本&#xff1a; &#xff08;1&#xff09;单纯文本 &#xff08;2&#xff09;带换行符的文本 这二种格式&#xff0c…

Pdf 转换成Word如何在线转换?职场公认好用软件推荐

Pdf 转换成Word如何在线转换&#xff1f;生活中很多时候我们需要接触大量的办公文件&#xff0c;特别是利用office的三种常见的文件格式编辑各类文件&#xff0c;最常见的便是Word文件操作。为了更方便我们进行文件传输&#xff0c;大部分情况下我们会把格式排版完好的Word文档…

UDS诊断系列介绍08-19服务

本文框架1. 系列介绍1.1 19服务概述1.2 DTC故障码定义1.3 DTC状态位2. 19服务常用子服务2.1 19 01服务2.2 19 02服务2.3 19 04服务2.4 19 06服务2.5 19 0A服务2.6 否定响应3. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议…

Android 深入系统完全讲解(15)

4 权限相关的知识 1 安卓权限 上层 APK 权限获取方式&#xff0c;配置 AndroidManifest.xml&#xff0c;系统会对应的给 gid&#xff0c;在创建进程的时候就带下去&#xff0c;这样子就可以访问对应的设备。 而系统相关的&#xff0c;会限制必须是 uidsystem 这类&#xff0c…

一年融资三轮,一文读懂亿格云这家公司

数字办公时代&#xff0c;网络安全是企业经营的底线工作。如何构建一个安全、稳定、高效的网络安全体系&#xff0c;是企业谋求发展的基础条件之一。近年&#xff0c;倡导“永不信任&#xff0c;始终验证”的零信任网络安全服务理念开始兴起。而国内致力于基于零信任理念构建办…

MySQL 行级锁(行锁、临键锁、间隙锁)

行级锁 行级锁&#xff0c;每次操作锁住对应的行数据。锁定粒度最小&#xff0c;发生锁冲突的概率最低&#xff0c;并发度最高。应用在InnoDB存储引擎中。 InnoDB的数据是基于索引组织的&#xff0c;行锁是通过对索引上的索引项加锁来实现的&#xff0c;而不是对记录加的锁。 1…

类和对象(上)

文章目录引用autoNULL&nullptr&0类和对象类的实例化默认成员函数构造函数析构函数拷贝构造函数运算符的重载赋值运算符的重载拷贝构造次数编译器优化前置后置> < ! - -const成员operator>>&&operator<<再谈构造函数初始化列表初始化expli…

使用Hi3861开发环境搭建

安装ubuntu ​ 文件夹的位置尽量选一个空间比较大的 内存也尽量分配大一点&#xff0c;不要到红色区域就行 固定分配&#xff0c;如果给它100G空间&#xff0c;他就会把这100G空间全部使用掉&#xff0c;动态分配&#xff0c;即使你给他100G内存&#xff0c;但实际使用的空间…

【自学Docker】Docker入门

Docker入门 Docker简介 Docker 是 Docker.Lnc 公司开源的一个基于 LXC 技术之上搭建的 Container 容器引擎&#xff0c;Docker 源代码托管在 Github上&#xff0c;Docker 是基于 Go 语言开发的并遵从 Apache2.0 协议开源。 Docker 属于 Linux 容器的一种封装&#xff0c;提供…

(十九)包装类

前言: 在我们讨论其他变量类型之间的相互转换时&#xff0c;我们需要了解一下Java的包装类&#xff0c;所谓包装类&#xff0c;就是能够直接将简单类型的变量表示为一个类&#xff0c;在执行变量类型的相互转换时&#xff0c;我们会大量使用这些包装类。Java共有六个包装类&…

pandas数据结构

文章目录Series创建series对象Series对象的属性DataFrame创建DataFrame对象Python 在数据处理上独步天下&#xff1a;代码灵活、开发快速&#xff1b;尤其是 Python 的 Pandas 包&#xff0c;无论是在数据分析领域、还是大数据开发场景&#xff0c;都具有显著的优势。Series S…

CesiumLab实例模型切片 CesiumLab系列教程

先解释下实例模型&#xff0c;实例模型使用 GPU instance 技术来渲染的模型&#xff0c;通常用来绘制大量几何体一致&#xff0c;但是位置姿态不同的对象&#xff0c;比如说森林场景&#xff0c;大量路灯&#xff0c;井盖等&#xff0c;如下图&#xff1a; 1.输入文件 目前输入…

【图文教程】Centos单机安装Redis

1.1.安装Redis依赖 Redis是基于C语言编写的&#xff0c;因此首先需要安装Redis所需要的gcc依赖&#xff1a; yum install -y gcc tcl1.2.上传安装包并解压 ​ 例如&#xff0c;凯哥将其放到了/usr/local/src 目录&#xff1a; 解压缩&#xff1a; tar -xzf redis-6.2.6.tar…

搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

网页可见区域高:document.body.clientHeight 网页正文全文高:document.body.scrollHeight 网页可见区域高&#xff08;包括边线的高&#xff09;&#xff1a;document.body.offsetHeight 网页被卷去的高&#xff1a;document.body.scrollTop 屏幕分辨率高&#xff1a;window.sc…