1214. 波动数列(推公式 + DP)

news2024/9/23 7:21:09

题目如下:

在这里插入图片描述

思路 or 题解:

我们可以设: 第一个数为 x x x
d = {a, -b}
那后续的数为: x + d 1 x + d_1 x+d1 , x + d 1 + d ) 2 x + d_1 + d_)2 x+d1+d)2 … … x + d 1 + d 2 + . . . . . . + d n − 1 x + d_1 + d_2 + ... ... + d_{n - 1} x+d1+d2+......+dn1
根据题意和上面的式子
我们合并一下同类项:
n ∗ x + ( n − 1 ) ∗ d 1 + ( n − 2 ) ∗ d 2 + . . . . . . + d n − 1 = s n * x + (n - 1) * d_1 + (n - 2) * d_2 + ... ... + d_{n-1} = s nx+(n1)d1+(n2)d2+......+dn1=s
我们可以解出 x x x
x = s − [ ( n − 1 ) ∗ d 1 + ( n − 2 ) ∗ d 2 + . . . . . . + d n − 1 ) ] n x = \frac{s- [(n - 1) * d_1 + (n - 2) * d_2 + ... ... + d_{n-1})]}{n} x=ns[(n1)d1+(n2)d2+......+dn1)]
又因为 x x x 是任意整数,我们可以得出来:
s s s ( n − 1 ) ∗ d 1 + ( n − 2 ) ∗ d 2 + . . . . . . + d n − 1 ) (n - 1) * d_1 + (n - 2) * d_2 + ... ... + d_{n-1}) (n1)d1+(n2)d2+......+dn1) 同余 n n n
这就将题转变成组合问题了,可以用背包的思想去解决!

状态表示:
f [ i ] [ j ] f[i][j] f[i][j] 选了 i i i d d d, 余数为 j j j 的方案数。
状态计算:

  • 选 a: f [ i ] [ j ] = f [ i − 1 ] [ j − a ∗ i ] f[i][j] = f[i-1][j - a * i] f[i][j]=f[i1][jai]
  • 选 -b: d [ i ] [ j ] = f [ i − 1 ] [ j + b ∗ i ] d[i][j] = f[i - 1][j + b*i] d[i][j]=f[i1][j+bi]
    特别注意: C++数组下标不能取负数,所以我们需要写一个函数,来确保计算出来的数为非负数。
auto getmod = [&](int x)
    {
        return (x % n + n) % n;
    };

时间复杂度: 0 ( n 2 ) 0(n^2) 0(n2)

AC 代码:

const int mod = 100000007;
const int inf = 2147483647;
const int N = 100009;
int n, s, a, b;
int f[1009][1009];
void solve()
{
    cin >> n >> s >> a >> b;
    f[0][0] = 1;
    auto getmod = [&](int x)
    {
        return (x % n + n) % n;
    };
    for (int i = 1; i < n; i++)
        for (int j = 0; j < n; j++)
            f[i][j] = (f[i - 1][getmod(j - a * i)] + f[i - 1][getmod(j + b * i)]) % mod;
    
    cout << f[n - 1][getmod(s)] << '\n';
}
int main()
{
    buff;
    solve();
}

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

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

相关文章

(Java高级教程)第二章Java多线程常见面试题-第三节:线程安全集合类和死锁

文章目录一&#xff1a;线程安全集合类&#xff08;1&#xff09;多线程环境下使用ArrayList&#xff08;2&#xff09;多线程环境使用队列&#xff08;3&#xff09;多线程使用哈希表二&#xff1a;死锁&#xff08;1&#xff09;概念&#xff08;2&#xff09;死锁产生的四个…

(小程序)会议OA项目-首页

目录 一、FIex布局简介 1.什么是flex布局&#xff1f; 2.flex属性 学习地址&#xff1a; 3.flex弹性布局演示 ① 容器的属性 ⑴ flex-direction属性 ⑵ flex-wrap属性 ⑶ flex-flow ⑷ justify-content属性 ⑸ align-items属性 ⑹ align-content属性 二、轮播图组件m…

微信记录怎么恢复?恢复已删除微信历史记录的4种方式

恢复已删除微信历史记录的4种方式 如何在有/没有备份的情况下在 iPhone 和 Android 上恢复旧的或已删除的微信历史记录&#xff0c;如聊天对话、语音消息、照片、图片和视频剪辑&#xff1f;参考本指南&#xff0c;祝您成功恢复微信数据。 关于微信数据恢复 “说真的&#xf…

容器化技术Docker与任务编排

Docker容器化 Docker简介 传统的Java项目部署需要自己进行打包&#xff0c;redis&#xff0c;nignx等中间件需要安装以及进行很多配置&#xff0c;稍微繁琐&#xff0c;而Docker使用了容器化的技术把这一过程封装为一条指令解决&#xff0c;而这取决于它的架构设计&#xff0c…

数值优化之函数高阶信息

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 函数高阶信息的介绍 2 函数高阶信息的计算 1 函数高阶信息的介绍 hessian矩阵是对称矩阵&#xff0c;最后一个公式是函数关于0的泰勒展开 负梯度是函数下降的最快方向 注意区分Hessian矩阵与Jacobian矩阵&#xff0c;Hess…

9_4、Java基本语法之System、Math、BigInteger与BigDecimal类的使用

一、System类的使用 1、System类代表系统&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。 由于该类的构造器是private的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实 例化该类。其内部的成员变量和成员方法都是static的&am…

【算法题解】7. 反转链表

文章目录题目解法一&#xff1a;迭代解题思路代码实现复杂度分析解法二&#xff1a;递归解题思路代码实现复杂度分析题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。来自&#xff1a;leetcode 解法一&#xff1a;迭代 解题思路 使用…

广州车展智能卷王:集度ROBO-01的取与舍

作者 | 德新 编辑 | 王博2022年的最后两天&#xff0c;今年最后一个A级车展在广州开幕。由于种种原因&#xff0c;不少车企匆忙备战或者干脆缺席&#xff0c;这届展会不如往届热闹。但也有憋了大招的选手&#xff0c;比如集度。 12月30日上午&#xff0c;集度在一场非常短的发布…

11-内部类and 12-集合初步

文章目录11-内部类链接外部类使用.this 和.new匿名内部类12-集合初步思考1&#xff0c;List<Apple> apples new ArrayList<>();思考2&#xff0c;如何初始化一个collection思考3&#xff0c;Pet关键字思考4&#xff0c;关于ListIterator这个双向迭代器思考5&#…

保护性暂停设计模式

目录 保护性暂停设计模式 获取结果 产生结果 总代码实现 测试 增加超时效果的Guarded suspension get(long timeout) 测试 保护性暂停设计模式 Guarded Suspension 即 保护性暂停; 是一种等待唤醒机制的一种规范 ,也可以理解为使用中设计模式,Java的API很多都按照保护性…

【免费开放源码】审批类小程序项目实战(活动审批端)

第一节&#xff1a;什么构成了微信小程序、创建一个自己的小程序 第二节&#xff1a;微信开发者工具使用教程 第三节&#xff1a;深入了解并掌握小程序核心组件 第四节&#xff1a;初始化云函数和数据库 第五节&#xff1a;云数据库的增删改查 第六节&#xff1a;项目大纲以及制…

系分 - 面向对象的方法【概念】

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 系分 - &#xff08;概念&#xff09;面向对象的方法 面向对象的方法&#xff08;OO&#xff0c;Object-Oriented&#xff09;是一种基于对象模型的程序设计方法&#xff0c;包括面向对象的分析&#xff08;OOA&a…

【iOS】内存管理

文章目录前言理解引用计数引用计数原理属性存取方法中的内存管理自动释放池保留环以ARC简化引用计数使用ARC时必须遵守的命名规则变量的内存管理语义ARC如何清理实例变量覆写内存管理的方法在dealloc方法中只释放应用并解除监听前言 内存管理&#xff1a; 在Objective-C这样的…

Windows平台下的内存泄漏检测

Windows平台下的内存泄漏检测一、使用_CrtDumpMemoryLeaks定位内存泄露添加对应的头文件转储内存泄漏信息程序任意点退出指定调试信息输出二、定位具体内存泄露位置内存快照转储内存快照比较内存快照完整例子三、使用WinDbg定位获取堆信息查看指定堆的使用情况获取地址信息获取…

【Docker】初级篇

【Docker】初级篇&#xff08;一&#xff09;Docker简介【1】docker是什么【2】容器与虚拟机比较【3】能干嘛【4】去哪下&#xff08;二&#xff09;Docker安装【1】前提说明【2】Docker的基本组成【3】安装步骤&#xff08;1&#xff09;确定是CentOS7及以上版本&#xff08;2…

抽烟打电话行为识别系统 yolo

抽烟打电话行为识别系统通过yolo深度学习框架模型&#xff0c;对现场画面区域进行7*24小时实时监测&#xff0c;发现抽烟打电话等违规行为立即抓拍存档预警。YOLOv5是一种单阶段目标检测算法&#xff0c;该算法在YOLOv4的基础上添加了一些新的改进思路&#xff0c;使其速度与精…

【 shell 编程 】第4篇 数组和函数

数组和函数 文章目录数组和函数一、数组1.普通数组2.关联数组3.数组和循环二、函数1.定义函数2.调用函数一、数组 变量&#xff1a;用一个固定的字符串&#xff0c;代替一个不固定字符串。 数组&#xff1a;用一个固定的字符串&#xff0c;代替多个不固定字符串。 1.普通数组…

Python代码实现学生管理系统

Python代码实现学生管理系统 需求说明 实现一个命令行版本的学生管理系统 功能: 新增学生 显示学生 查找学生 删除学生 存档到文件 创建入口函数 使用一个全局列表 students 表示所有学生信息. 使用 menu 函数和用户交互. 这是一个自定义函数. 使用 insert , show ,…

MacOS Ventura安装失败的原因及解决方法分享

2022年10月&#xff0c;苹果公司向Mac电脑用户推送了MacOS Ventura正式版更新&#xff0c;此次更新为MacOS带来了台前调度、连续互通相机、iMessage 撤回、编辑等功能。吸引众多Mac电脑用户不由纷纷下载安装&#xff0c;但各用户在安装的过程中经常遇到更新MacOS Ventura时突然…

物联网与射频识别技术,课程实验(五)

实验5—— 基于随机二进制树的防冲突算法的实现与性能分析 实验说明&#xff1a; 利用Python或Matlab模拟基于随机二进制树的防冲突算法&#xff1b; 分析标签数量k对遍历所有标签所需时间的影响&#xff1b; 分析标签ID的长度、分布对算法性能的影响&#xff1b; 利用Python或…