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

P1890 gcd区间

题目传送门

前言:依旧是一道水题,看着那么多人再用线段树,我都懵了(因为我不会),本以为这道题只能用线段树,但是再仔细一看,好像可以用DP来做,所以就有了这篇题解(没错就是这么来的)。

题解:

DP的维度分析,以及DP意义:

首先这道题在询问的时候有两个参数,一个是l,另一个是r,询问得出的结果是区间 [l,r] ,所有数的最大公因数,所以我们可以这样,定义一个二维DP数组,横纵两个坐标表(i,j)表示从l到r这个区间内的最大公因数,这个做法有点类似于区间DP,但是要比区间简单

DP的状态转移方程:

我们先来看一个表格:

我们来看一下dp[i][j]是怎么得出来的,首先我们知道dp[i][j]是从第i个数到第j个数的最大公因数,所以我们应当找到dp[i][j]与前面dp数组的关系,我们知道有一个公式:

gcd(a,b,c)=gcd(gcd(a,b),c)

这个公式的意思就是三个数的最大公因数是其中两个数的最大公因数与第三个数的最大公因数,因为有了这个公式,我们就可以把gcd以及括号内的数替换成dp数组中的元素,以此来求出状态转移方程,我们可以假设gcd(a,b,c)为dp[i][j],那么gcd(a,b)就是dp[i[[j-1],则c就是a[j],把他带进去就可以得出状态转移方程(如下):

gcd(a,b,c)=gcd(gcd(a,b),c)

dp[i][j]=gcd(dp[i][j-1],c)

dp[i][j]=gcd(dp[i][j-1],a[j])

最后就知道了dp[i][j]=gcd(dp[i][j-1],a[j])就是我们最终的状态转移方程了,然后对着状态转移方程敲代码这道题就能轻松AC了。

gcd函数:

这个函数我们可以使用辗转相除法来求(也称欧几里得算法),利用被除数和除数的gcd为除数和余数的gcd是一样的结论,转而可以求解(这里有问题:NOIP是不允许用带下划线的gcd函数),所以咱们就乖乖手敲把(qwq):

int gcd(int a,int b){if(a%b==0){return b;}else{return gcd(b,a%b);}
}

AC代码:

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){if(a%b==0) return b;else return gcd(b,a%b);
}
int main(){int n,m;scanf("%d%d",&n,&m);int a[1005];int dp[1005][1005];for(int i=1;i<=n;i++){scanf("%d",&a[i]);}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j){dp[i][j]=a[j];}else{dp[i][j]=gcd(dp[i][j-1],a[j]);}}}while(m--){int l,r;scanf("%d%d",&l,&r);printf("%d",dp[l][r]);printf("\n");}return 0;
}

http://www.lryc.cn/news/615132.html

相关文章:

  • 如何理解SA_RESTART”被信号中断的系统调用自动重启“?
  • SELinux 入门指南
  • ROS2 多线程 与组件机制
  • Python NumPy入门指南:数据处理科学计算的瑞士军刀
  • Qt 的对象线程亲和性规则
  • 华为欧拉OpenEnler系统在启动MindIE时权限问题的解决方法
  • 从灵感枯竭到批量产出:无忧秘书创作平台如何重构内容生产者的工作流程?全环节赋能分析
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • WinForm 中 ListView 控件的实战应用与功能拓展
  • kafka架构原理快速入门
  • AI大语言模型在生活场景中的应用日益广泛,主要包括四大类需求:文本处理、信息获取、决策支持和创意生成。
  • 软件定义车辆加速推进汽车电子技术
  • Blender 快捷键速查表 (Cheat Sheet)
  • 【线性代数】6二次型
  • 可直接运行的 Playwright C# 自动化模板
  • 通过 Certimate 统一管理 SSL 证书 支持自动化申请、全平台部署
  • 【线性代数】线性方程组与矩阵——(1)线性方程组与矩阵初步
  • 数据挖掘2.6 Perceptron Modeling 感知器建模
  • 我想做自动化报社保,用哪种技术更好一点呢?
  • stm32项目(25)——基于stm32的植物生长箱环境监测系统
  • 「iOS」————响应者链与事件传递链
  • GPT-5:数字大脑的进化史
  • 人工智能-python-数据处理实战-特征降维(PCA)
  • CD63.【C++ Dev】多态(2): 剖析虚函数表的前置知识
  • 【线性代数】线性方程组与矩阵——(3)线性方程组解的结构
  • 【CTF】PHP反序列化基础知识与解题步骤
  • 华为实验:SSH
  • 华为实验: 单区域/多区域OSPF
  • [优选算法专题一双指针——四数之和]
  • 【Leecode 随笔】