《算法竞赛·快冲300题》每日一题:“平方和”

算法竞赛·快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。
所有题目放在自建的OJ New Online Judge。
用C/C++、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。

文章目录

  • 题目描述
  • 题解
  • C++代码
  • Java代码
  • Python代码

平方和” ,链接: http://oj.ecustacm.cn/problem.php?id=1754

题目描述

【题目描述】 存在n个变量xi,现在告诉你每个变量的取值范围在[li, ri]中。
假设这n个数字的平方和为S,求总共存在多少种不同的S。
【输入格式】 输入第一行为正整数n。(1≤n≤100)
接下来n行为两个整数li和ri。(1≤li,ri≤100)。
【输出格式】 输出一个数表示答案。
【输入样例】

5
1 2
2 3
3 4
4 5
5 6

【输出样例】

26

题解

   如果暴力统计所有可能的S,需要用对n个变量进行组合,例如样例,x1可选1或2,x2可选2或3,…等等,最多可能有 2 5 2^5 25种组合。当n=100,li=1,ri=100时,可能有 10 0 100 100^{100} 100100种组合。
   是否可以反过来思考,判断某个平方和是否存在?最小的平方和是n=1,li=ri=1时,平方和等于1;最大是100个100,平方和等于 100 × 10 0 2 = 1 0 6 100×100^2=10^6 100×1002=106。最多只有 1 0 6 10^6 106个平方和。
   定义dp[],若dp[i] = 1,表示平方和i存在。
   处理到第i个取值范围[ll, rr]时,新的平方和范围扩展到[mmin, mmax],mmin表示所有取值范围最小值的平方和、mmax表示所有取值范围最大值的平方和。
   用k遍历[ll, rr]中的每个数,然后判断dp[j]是否存在,mmin≤j≤mmax。
   (1)如果dp[j - k*k] == 1,说明以前算过i = j - k*k这个平方和,显然现在可以计算出i + k*k = j这个平方和。
   (2)不过,如果j - k*k比以前算出的最小值还小,显然不对,所以需要排除j - k*k < mmin - ll*ll的情况。

【笔记】 简单DP 。

C++代码

   代码第12行,j需要反过来循环,请思考为什么。

#include <bits/stdc++.h>
using namespace std;
const int N = 1000000 + 10;
bool dp[N];
int main(){int n; cin >> n;int ll, rr, mmin = 0, mmax = 0;dp[0] = 1;for(int i = 1; i <= n; i++) {cin >> ll >> rr;mmin += ll * ll, mmax += rr * rr; //计算最小平方和、最大平方和for(int j = mmax; j >= mmin; j--) {dp[j] = 0;for(int k = ll; k <= rr; k++)   {if(j - k*k < mmin - ll*ll)  break; //如果j - k*k小于以前的最小平方和,排除if(dp[j - k*k] == 1){ dp[j] = 1; break;}}}}int ans = 0;for(int i = mmin; i <= mmax; i++)   ans += dp[i];cout<<ans<<endl;return 0;
}

Java代码

import java.util.*;
public class Main {static final int N = 1000000 + 10;static boolean[] dp = new boolean[N];public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int ll, rr, mmin = 0, mmax = 0;dp[0] = true;for(int i = 1; i <= n; i++) {ll = input.nextInt();rr = input.nextInt();mmin += ll * ll;mmax += rr * rr;for(int j = mmax; j >= mmin; j--) {dp[j] = false;for(int k = ll; k <= rr; k++) {if(j - k*k < mmin - ll*ll)  break;if(dp[j - k*k] == true) { dp[j] = true;   break;  }}}}int ans = 0;for(int i = mmin; i <= mmax; i++) if(dp[i] == true) ans++;             System.out.println(ans);input.close();}
}

Python代码

N = 1000000 + 10
dp = [False] * N
n = int(input())
mmin, mmax = 0, 0
dp[0] = True
for i in range(1, n+1):ll, rr = map(int, input().split())mmin += ll * llmmax += rr * rrfor j in range(mmax, mmin-1, -1):dp[j] = Falsefor k in range(ll, rr+1):if j - k*k < mmin - ll*ll:  breakif dp[j - k*k] == True:dp[j] = Truebreak
ans = 0
for i in range(mmin, mmax+1):if dp[i] == True:  ans += 1
print(ans)

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

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

相关文章

【Python机器学习】实验04(1) 多分类(基于逻辑回归)实践

文章目录 多分类以及机器学习实践如何对多个类别进行分类1.1 数据的预处理1.2 训练数据的准备1.3 定义假设函数&#xff0c;代价函数&#xff0c;梯度下降算法&#xff08;从实验3复制过来&#xff09;1.4 调用梯度下降算法来学习三个分类模型的参数1.5 利用模型进行预测1.6 评…

CS162 13-17 虚拟内存

起源 为啥我们需要虚拟内存-----------需求是啥&#xff1f; 可以给程序提供一个统一的视图&#xff0c;比如多个程序运行同一个代码段的话&#xff0c;同一个kernel&#xff0c;就可以直接共享 cpu眼里的虚拟内存 无限内存的假象 设计迭代过程 为啥这样设计&#xff1f; 一…

安装vite-plugin-svg-icons

找不到合适的图标&#xff0c;如何使用其他的svg图标&#xff1f; 安装vite-plugin-svg-icons 使用svg-icon&#xff0c;即可使用iconfont等svg图标库 安装及使用过程 一、安装依赖二、在src/assets新建svg目录三、vite.config.js中进行配置四、在main.js中导入文件五、在compo…

clickhouse-安装部署

官网文档 1.采用Debian包方式安装 # 设置Debian仓库 sudo apt-get install -y apt-transport-https ca-certificates dirmngr GNUPGHOME$(mktemp -d) sudo GNUPGHOME"$GNUPGHOME" gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse-keyring.gpg …

Redis篇

文章目录 Redis-使用场景1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致5、Redis持久化6、数据过期策略7、数据淘汰策略 Redis-分布式锁1、redis分布式锁&#xff0c;是如何实现的&#xff1f;2、redisson实现的分布式锁执行流程3、redisson实现的分布式锁-可重入4、redisson实…

技术复盘(5)--git

技术复盘--git 资料地址原理图安装配置基本命令分支命令对接gitee练习:远程仓库操作 资料地址 学习地址-B站黑马&#xff1a;https://www.bilibili.com/video/BV1MU4y1Y7h5 git官方&#xff1a;https://git-scm.com/ gitee官网&#xff1a;https://gitee.com/ 原理图 说明&am…

Twitter 劲敌 Threads,“魔改”了哪些 Python 技术栈?

Meta 创始人 Mark Zuckerberg 昨天在 Threads 上宣布&#xff0c;周三正式上线的 Threads 注册量已突破三千万。 Threads 是一个基本文本的社交应用&#xff0c;由 Instagram 团队开发。虽然它在功能上还无法真正取代 Twitter&#xff0c;但目前看来事实上已是 Twitter 的替代方…

耗时3个月,线下访谈30+ csdn大佬,规划出了我的云原生学习路线

前言 大家好&#xff0c;我是沐风晓月&#xff0c;最近线下拜访不少云原生方向的大佬和csdn其他方向的大佬&#xff0c;受益匪浅。 于是在 5月23日&#xff0c;我定下来自己的目标&#xff1a; 我的目标&#xff1a; 可以说&#xff0c;这个世代给予的机遇&#xff0c;让我…

对外接口签名生成方式

接口签名生成方式 前言 当某个系统对外部系统提供接口访问时&#xff0c;为提高接口请求安全性&#xff0c;往往会在接口访问时添加签名&#xff0c;当外部系统访问本系统签名验证成功时才能正常返回数据&#xff0c;一般接口提供方会与外部系统提前约定好&#xff0c;不同外…

基于飞桨paddle的极简方案构建手写数字识别模型测试代码

基于飞桨paddle的极简方案构建手写数字识别模型测试代码 原始测试图片为255X252的图片 因为是极简方案采用的是线性回归模型&#xff0c;所以预测结果数字不一致 本次预测的数字是 [[3]] 测试结果&#xff1a; PS E:\project\python> & D:/Python39/python.exe e:/pro…

ubuntu设置主机ip

ubuntu 设置ip sudo dhclient -r enp67s0 # 是你的网卡&#xff0c;可以通过ifconfig 查&#xff0c;比如enp0 sudo ifconfig enp67s0 192.168.1.114 netmask 255.255.255.0 Ubuntu显示有线网已连接但无法上网&#xff0c;已经确认网口、交换机&#xff08;路由器&#xff…

你知道HTTP与HTTPS有什么区别吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是HTTP&#xff1f; 二、什么是HTTPS&#xff1f; 三、HTTPS 的工作原理 1、客户端发起 HTTPS 请求 2、服务端的配置 3、…

BT#蓝牙 - Link Policy Settings

对于Classic Bluetooth的Connection&#xff0c;有一个Link_Policy_Settings&#xff0c;是HCI configuration parameters中的一个。 Link_Policy_Settings 参数决定了本地链路管理器(Link Manager)在收到来自远程链路管理器的请求时的行为&#xff0c;还用来决定改变角色(rol…

UE4/5C++多线程插件制作(十九、异步资源读取封装,细节修改)

目录 MTPResourceLoadManage MTPThreadInterface MTPManage.h MTPManage.cpp RTPAgendy RTPAgendy.h RTPAgendy.cpp

Android如何用系统签名打包应用

前言 应用使用系统签名可以在用户不需要手动授权的情况下自动获取权限。适合一些定制系统中集成apk的方案商。 步骤 需要在AndroidManifest.xml中添加共享系统进程属性&#xff1a; android:sharedUserId"android.uid.system"如下图所示&#xff1a; 找到系统定制…

windows环境安装elasticsearch+kibana并完成JAVA客户端查询

下载elasticsearch和kibana安装包 原文连接&#xff1a;https://juejin.cn/post/7261262567304298554 elasticsearch官网下载比较慢&#xff0c;有时还打不开&#xff0c;可以通过https://elasticsearch.cn/download/下载&#xff0c;先找到对应的版本&#xff0c;最好使用迅…

LeetCode每日一题——1331.数组序号转换

题目传送门 题目描述 给你一个整数数组 arr &#xff0c;请你将数组中的每个元素替换为它们排序后的序号。 序号代表了一个元素有多大。序号编号的规则如下&#xff1a; 序号从 1 开始编号。一个元素越大&#xff0c;那么序号越大。如果两个元素相等&#xff0c;那么它们的…

集团MySQL的酒店管理系统

酒店管理系统 概述 基于Spring Spring MVC MyBatis的酒店管理系统&#xff0c;主要实现酒店客房的预定、入住以及结账等功能。使用Maven进行包管理。 用户端主要功能包括&#xff1a; 登录注册、客房预订、客房评论&#xff08;编写评论和查看评论&#xff09; 后台管理主要…

Java maven的下载解压配置(保姆级教学)

mamen基本概念 Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性&#xff0c;所以…

【已解决】windows7添加打印机报错:加载Tcp Mib库时的错误,无法加载标准TCP/IP端口的向导页

windows7 添加打印机的时候&#xff0c;输入完打印机的IP地址后&#xff0c;点击下一步&#xff0c;报错&#xff1a; 加载Tcp Mib库时的错误&#xff0c;无法加载标准TCP/IP端口的向导页 解决办法&#xff1a; 复制以下的代码到新建文本文档.txt中&#xff0c;然后修改文本文…