当前位置: 首页 > article >正文

转移dp简单数学数论

1.转移dp问题

昨天的练习赛上有一个很好玩的起终点问题,第一时间给出bfs的写法。

但是写到后面发现不行,还得是的dp转移的写法才能完美的解决这道题目。

每个格子可以经过可以不经过,因此它的状态空间是2^(n*m),但是n,m的数据范围是500,显然是不可取的。bfs适用于计数或者最短距离,而不是最大和或最优路径问题。

故:对于最大和的问题dp是最合适的选择。

题目意思:

给定起点终点,每个点只能经过一次,找到最大的路径和,并且只能向下向右走动。

思路:

既然是dp那么一点有初始化,很容易想到第一列一定是固定的,因为该列只能像下走动(从起始点开始)。

那么之后我们就对每一列赋值(从第一列开始,每一列的状态都是从前面一列转移过来的)。

对于某一列的赋值,我们可以从头开始往下走,也可以是从尾开始走到第一行在进行继续走,那么这里就分成了两种情况。

我们先任意求出一种情况,然后在慢慢的用前缀和进行维护(因为是一条线下的,前缀和维护方便)。(毕)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int nima=8e18;
int a[504][504];
void solve(){int n,m;cin>>n>>m;int s,t;cin>>s>>t;s--,t--;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>a[i][j];}}vector<vector<int>> dp(n,vector<int>(m,-nima));//这里的dp[i][j]的意思是从[s][0]开始到[i][j]的最大贡献// 初始化第一列的值int sum=a[s][0];for(int i=s;;){//一共要遍历s次dp[i][0]=sum;  // 初始化环形路径的第一个点i=(i+1)%n;     // 环形移动sum+=a[i][0];   // 累加路径上的值if(i==s) break; // 回到起点时结束}// 动态规划处理每一列for(int i=1;i<m;i++){int cnt=-nima;int sum=0;vector<int> pre(n);  // 前缀和数组// 正向遍历,计算从上方转移的最大值for(int j=0;j<n;j++){cnt=max(cnt,dp[j][i-1]-sum);  // 维护最大值,从左边过来的sum+=a[j][i];                   // 累加当前列的值dp[j][i]=cnt+sum;              pre[j]=sum;                     // 记录前缀和,这个sum是列环形状态下的前缀和}cnt=-nima;// 反向遍历,处理环形路径的情况for(int j=n-1;j>=0;j--){if(j!=n-1) dp[j][i]=max(dp[j][i],cnt+pre[j]);// 计算从下方转移的最大值(考虑环形路径)if(j!=0) cnt=max(cnt,dp[j][i-1]+pre[n-1]-pre[j-1]);}}cout<<dp[t][m-1]<<endl;
}signed main(){int ac=1;while(ac--)  solve();return 0;
}

2.简单数学

这次的团队赛有个简单数学问题,挺有意思的。

题目意思:

给出一个数组,找出最大贡献(每个贡献是相邻两个数字之差的绝对值)。

思路:

我们可以根据题目给的样例找到....

1 2 3 4 5 6 的最大贡献是9,即(3,4)(2,5) (1,6)状态下贡献是最大的。

我们进行改变之后发现....

3 2 1 4 5 6的最大贡献也是9,即(1,4)(2,5)(3,6)状态下贡献是最大的。

之后在进行任意举列子之后我们发现....

一组数据进行排序后每次最大贡献取法是首位找(毕)

小tips:数学问题,大胆猜,先排序,然后...(看看能不能瞎猫碰到死耗子)

#include<bits/stdc++.h>
using namespace std;
#define int long longinline void solve(){int n; cin >> n;vector<int> a(2 * n);for(int i = 0; i < 2 * n; i++) cin >> a[i];sort(a.begin(), a.end());//排序int answer = 0;for(int i = 0; i < n; i++) {answer+= abs(a[i] - a[2 * n - 1 - i]);//首位之差,参考1 2 3 4 5 6这个样例}cout << answer << endl;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t; cin >> t;while(t--) solve();return 0;
}

3.数论

这次的数论有点点绕...

 题目意思:

给定一个数是好数m,只有m形如k!或者为偶数的条件下才成立。

给定一个数a,找到最少的分类情况k,使得k个好数之后是a。

思路:

观察题目的数据范围我们看到,n<=10^12,而且有t组数据,最好做一个状态压缩。

我们先对阶乘进行赋初值,15!>10^12。

每次减去1到15的阶乘,最后加上二进制中1的个数就是答案,每次枚举维护一个最小值即可。(毕)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define pii pair<int, int> 
vector<int> v;inline void solve() {int sum = 1,i=1;  // 初始化阶乘结果为 1while(sum<=1e12){sum*=i++;v.push_back(sum);}//sort(v.begin(), v.end());  // 对向量 v 进行排序// 去除重复的阶乘结果//v.erase(unique(v.begin(), v.end()), v.end());int m = v.size();  int n;cin >> n; int ans = 1e9 + 7;// 遍历所有可能的子集(通过位掩码的方式)for (int i = 0; i <= (1 << m) - 1; i++) {int res = n;  // 初始化 res 为 n// 遍历每一位,检查是否在子集中for (int j = 0; j < m; j++) {if ((1 << j) & i)  // 如果第 j 位在子集 i 中res -= v[j];  // 从 res 中减去对应的阶乘值}if (res < 0) continue;  // 如果 res 为负数,跳过当前子集// 计算当前子集的位数和剩余数的位数之和,并更新最小值ans = min(ans, (int)__builtin_popcountll(res) + __builtin_popcountll(i));}cout << ans << endl;
}
signed main() {int nc;cin >> nc;while (nc--) solve();  
}

相关文章:

转移dp简单数学数论

1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题&#xff0c;第一时间给出bfs的写法。 但是写到后面发现不行&#xff0c;还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过&#xff0c;因此它的状态空间是2^&#xff08;n*m&#xff09;&…...

【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理

【大模型面试每日一题】Day 27&#xff1a;自注意力机制中Q/K/V矩阵的作用与缩放因子原理 &#x1f4cc; 题目重现 &#x1f31f;&#x1f31f; 面试官&#xff1a;请解释Transformer自注意力机制中Query、Key、Value矩阵的核心作用&#xff0c;并分析为何在计算注意力分数时…...

Ubuntu24.04 LTS安装java8、mysql8.0

在 Ubuntu 24.04 上安装 OpenJDK OpenJDK 包在 Ubuntu 24.04 的默认存储库中随时可用。 打开终端并运行以下 apt 命令: sudo apt update查看是否已经安装java java --version如果未安装会有提示&#xff0c;直接复制命令安装即可&#xff0c;默认版本&#xff1a; sudo apt in…...

动静态库--

目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库&#xff1a;.a结尾 Windows静态库&#xff1a;.lib结尾…...

【检索增强生成(RAG)全解析】从理论到工业级实践

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心架构图解&#x1f4a1; 核心工作流程&#x1f527; 关键技术模块⚖️ 技术选型对…...

git clone时出现无法访问的问题

git clone时出现无法访问的问题 问题&#xff1a; 由于我的git之前设置了代理&#xff0c;然后在这次克隆时又没有打开代理 解决方案&#xff1a; 1、如果不需要代理&#xff0c;直接取消 Git 的代理设置&#xff1a; git config --global --unset http.proxy git config --gl…...

Lesson 22 A glass envelope

Lesson 22 A glass envelope 词汇 dream v. 做梦&#xff0c;梦想 n. 梦 用法&#xff1a;1. have a dream 做梦    2. have a good / sweet dream 做个好梦 [口语晚安]    3. dream about 人/物 梦到……    4. dream that 句子 梦到…… 例句&#xff1a;他昨晚…...

文件系统·linux

目录 磁盘简介 Ext文件系统 块 分区 分组 inode 再谈inode 路径解析 路径缓存 再再看inode 挂载 小知识 磁盘简介 磁盘&#xff1a;一个机械设备&#xff0c;用于储存数据。 未被打开的文件都是存在磁盘上的&#xff0c;被打开的加载到内存中。 扇区&#xff1a;是…...

【Matlab】雷达图/蛛网图

文章目录 一、简介二、安装三、示例四、所有参数说明 一、简介 雷达图&#xff08;Radar Chart&#xff09;又称蛛网图&#xff08;Spider Chart&#xff09;是一种常见的多维数据可视化手段&#xff0c;能够直观地对比多个指标并揭示其整体分布特征。 雷达图以中心点为原点&…...

【信息系统项目管理师】第24章:法律法规与标准规范 - 27个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

使用JProfiler进行Java应用性能分析

文章目录 一、基本概念 二、Windows系统中JProfiler的安装 1、下载exe文件 2、安装JProfiler 三、JProfiler的破解 四、IDEA中配置JProfiler 1、安装JProfiler插件 2、关联本地磁盘中JProfiler软件的执行文件 3、IDEA中启动JProfiler 五、监控本地主机中的Java应用 …...

遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型

文章目录 效果项目下载项目安装安装步骤1、安装环境2、新建虚拟环境和安装依赖测试模型效果效果 项目下载 项目地址 https://github.com/souvikmajumder26/Land-Cover-Semantic-Segmentation-PyTorch 可以直接通过git下载 git clone https://github.com/souvikmajumder26/Lan…...

最大似然估计(Maximum Likelihood Estimation, MLE)详解

一、定义 最大似然估计 是一种参数估计方法&#xff0c;其核心思想是&#xff1a; 选择能使观测数据出现概率最大的参数值作为估计值。 具体来说&#xff0c;假设数据 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1​,x2​,…,xn​独立且服从某个概率分布 P ( x ∣ θ ) P(…...

【单片机】如何产生负电压?

以下是对知乎文章《单片机中常用的负电压是这样产生的&#xff01;》的解析与总结&#xff0c;结合电路原理、应用场景及讨论要点展开&#xff1a; 一、负电压产生的核心原理 负电压本质是相对于参考地&#xff08;GND&#xff09;的电势差为负值&#xff0c;需通过电源或储能…...

Java 8 Stream 流操作全解析

文章目录 **一、Stream 流简介****二、Stream 流核心操作****1. 创建 Stream****2. 中间操作&#xff08;Intermediate Operations&#xff09;****filter(Predicate<T>)&#xff1a;过滤数据****1. 简单条件过滤****2. 多条件组合****3. 过滤对象集合****4. 过滤 null 值…...

java线程中断的艺术

文章目录 引言java中的中断何时触发中断阻塞如何响应中断中断的一些实践基于标识取消任务如何处理阻塞式的中断合理的中断策略时刻保留中断的状态超时任务取消的最优解处理系统层面阻塞IO小结参考引言 我们通过并发编程提升了系统的吞吐量,特定场景下我们希望并发的线程能够及…...

【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、进度类计算的基本概念1.1 前导图法1.2 箭线图法1.3 时标网络图1.4 确定依赖关系1.5 提前量与滞后量1.6 关键路径法1.7 总浮动时间1.8 自由浮动时间1.9 关键链法1.10 资源优化技术1.11 进度压缩二、基本公式…...

HarmonyOS 鸿蒙应用开发基础:转换整个PDF文档为图片功能

在许多应用场景中&#xff0c;将PDF文档的每一页转换为单独的图片文件是非常有帮助的。这可以用于文档的分享、扫描文档的电子化存档、或者进行进一步的文字识别处理等。本文将介绍如何使用华为HarmonyOS提供的PDF处理服务将整个PDF文档转换为图片&#xff0c;并将这些图片存放…...

Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射

前置阅读&#xff0c;关于Flask-SQLAlchemy支持哪些数据库及基本配置&#xff0c;链接&#xff1a;Flask-SQLAlchemy_数据库配置 摘要 本文以一段典型的 SQLAlchemy 代码示例为引入&#xff0c;阐述以下核心概念&#xff1a; 模型类&#xff08;Model Class&#xff09; ↔ 数…...

刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答

知识点汇总&#xff1a; 数组&#xff1a; Array.prototype.pop()&#xff1a;从数组末尾删除一个元素&#xff0c;并返回这个元素。 Array.prototype.shift()&#xff1a;从数组开头删除一个元素&#xff0c;并返回这个元素。 array.reverse()&#xff1a;将数组元素反转顺…...

RAM(随机存取存储器)的通俗解释及其在路由器中的作用

RAM&#xff08;随机存取存储器&#xff09;的通俗解释及其在路由器中的作用 一、RAM是什么&#xff1f; RAM&#xff08;Random Access Memory&#xff09; 就像餐厅的“临时工作台”&#xff1a; 核心作用&#xff1a;临时存储正在处理的任务&#xff08;如厨师同时处理多道…...

六、【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架

【前端启航篇】Vue3 项目初始化与基础布局&#xff1a;搭建美观易用的管理界面骨架 前言技术选型回顾与准备准备工作第一步&#xff1a;进入前端项目并安装 Element Plus第二步&#xff1a;在 Vue3 项目中引入并配置 Element Plus第三步&#xff1a;设计基础页面布局组件第四步…...

【项目需求分析文档】:在线音乐播放器(Online-Music)

1. 用户管理模块 1.1 注册功能 功能描述 提供注册页面&#xff0c;包含用户名、密码输入框及提交按钮。用户名需唯一性校验&#xff0c;密码使用 BCrypt 加密算法存储。注册成功后自动跳转至登录页面。 1.2 登录功能 功能描述 提供登录页面&#xff0c;包含用户名、密码输入…...

C++ 前缀和数组

一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组&#xff0c;计算从起始位置到每个位置的和&#xff0c;生成一个新的数组&#xff08;前缀和数组&#xff09;。利用该数组&#xff0c;可以快速计算任意区间的和&#xff0c;快速求出数组中某一段连续区间的和。 1.2. …...

PHP 实现通用数组字段过滤函数:灵活去除或保留指定 Key

PHP 实现数组去除或保留指定字段的通用函数详解 一、文章标题 《PHP 实现通用数组字段过滤函数:灵活去除或保留指定 Key》 二、摘要 在实际开发中,我们经常需要对数组进行字段级别的操作,例如从一个数组中删除某些敏感字段(如密码、token),或者只保留特定字段用于接口…...

NACOS2.3.0开启鉴权登录

环境 名称版本nacos2.3.0&#xff08;Linux&#xff09;java java version "17.0.14" 2025-01-21 LTS # # Copyright 1999-2021 Alibaba Group Holding Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use thi…...

细胞冻存的注意事项,细胞冻存试剂有哪些品牌推荐

细胞冻存的原理 细胞冻存的基本原理是利用低温环境抑制细胞的新陈代谢&#xff0c;使细胞进入一种“休眠”状态。在低温条件下&#xff0c;细胞的生物活动几乎停止&#xff0c;从而实现长期保存。然而&#xff0c;细胞在冷冻过程中可能会因为细胞内外水分结冰形成冰晶而受损。…...

快速上手Linux火墙管理

实验网络环境&#xff1a; 主机IP网络f1192.168.42.129/24NATf2&#xff08;双网卡&#xff09; 192.168.42.128/24 192.168.127.20/24 NAT HOST-NOLY f3192.168.127.30/24HOST-ONLY 一、iptables服务 1.启用iptables服务 2.语法格式及常用参数 语法格式&#xff1a;参数&…...

[创业之路-375]:企业战略管理案例分析 - 华为科技巨擘的崛起:重构全球数字化底座的超级生命体

在人类文明从工业时代&#xff08;机械、电气、自动化&#xff09;迈向数字智能&#xff08;硬件、软件、算法、虚拟、智能&#xff09;时代的临界点上&#xff0c;一家中国企业正以令人震撼的姿态重塑全球科技版图。从通信网络的底层架构到智能终端的生态闭环&#xff0c;从芯…...

【paddle】常见的数学运算

根据提供的 PaddlePaddle 函数列表&#xff0c;我们可以将它们按照数学运算、逻辑运算、三角函数、特殊函数、统计函数、张量操作和其他操作等类型进行分类。以下是根据函数功能进行的分类&#xff1a; 取整运算 Rounding functions 代码描述round(x)距离 x 最近的整数floor(…...