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

gesp(C++六级)(11)洛谷:P11246:[GESP202409 六级] 小杨和整数拆分

gesp(C++六级)(11)洛谷:P11246:[GESP202409 六级] 小杨和整数拆分

在这里插入图片描述

题目描述

小杨有一个正整数 n n n,小杨想将它拆分成若干完全平方数的和,同时小杨希望拆分的数量越少越好。

编程计算总和为 n n n 的完全平方数的最小数量。

输入格式

输入只有一行一个正整数 n n n

输出格式

输出一行一个整数表示答案。

样例 #1

样例输入 #1

18

样例输出 #1

2

提示

数据规模与约定

对全部的测试数据,保证 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*思路: 
	动态规划
	1、dp[i]含义:数字i的最少拆分数量
	2、状态转移方程:dp[i]=min(dp[i],dp[i-j*j]+1);
	   备注1:i-j*j表示i其中一部分被拆成了j*j平方数 
	   备注2:j*j<=i(最大的拆分情况)
*/
int n,a[1010],dp[100010];
int main(){
	cin>>n;
	//dp初始化
	memset(dp,0x3f,sizeof(dp)); //初始化为极大值 
	dp[0]=0; 
	//dp递推 
	for(int i=1;i<=n;i++){//从1枚举到n 
		for(int j=1;j*j<=i;j++){//枚举所有可能的拆分情况 
			dp[i]=min(dp[i],dp[i-j*j]+1);
		}
	} 
	//输出
	cout<<dp[n]; 
	return 0;
}

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容


http://www.kler.cn/a/532395.html

相关文章:

  • 【前端】ES6模块化
  • 爬虫基础(四)线程 和 进程 及相关知识点
  • 如何处理 Typecho Joe 主题被抄袭或盗版的问题
  • Python + Tkinter + pyttsx3实现的桌面版英语学习工具
  • 亚博microros小车-原生ubuntu支持系列:20 ROS Robot APP建图
  • 从零开始部署Dify:后端与前端服务完整指南
  • Android ExpandableListView 详细用法全解析
  • 调用高德地图 api 开发地图组件
  • FPGA 时钟多路复用
  • SQL序列分析法:核心技巧与实战方法论 | 从用户行为分析到工业设备监控的通用解决方案
  • ES6Module
  • 蓝桥杯试题:排序
  • MyBatisPlus(SpringBoot版)功能说明
  • DeepSeek辅助学术写作进行大纲设计效果如何
  • PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接
  • 【模型】Bi-LSTM模型详解
  • MSP430 单独使用CCR1不触发的问题解决
  • 【Linux系统】信号:再谈OS与内核区、信号捕捉、重入函数与 volatile
  • 大模型安全漏洞报告——真实漏洞视角下的全面探讨
  • 【Vue3 完整学习笔记 - 第一部分】
  • Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)
  • 算法基础--二分查找
  • C++实现一款功能丰富的通讯录管理系统
  • sentinel的限流原理
  • Nacos 的介绍和使用
  • 浏览器的通信能力