《P11246 [GESP202409 六级] 小杨和整数拆分》

题目背景

对应的选择、判断题:试题 - GESP 202409 C++ 六级 - 洛谷有题

题目描述

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

复制代码
18

输出 #1复制

复制代码
2

说明/提示

数据规模与约定

对全部的测试数据,保证 1≤n≤105。

代码实现:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
const int INF = 1e9;

int dp[MAXN];

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) dp[i] = INF;
    dp[0] = 0;
    for(int i = 1; i * i <= n; i++)
    {
        int sq = i * i;
        for(int j = sq; j <= n; j++)
        {
            dp[j] = min(dp[j], dp[j - sq] + 1);
        }
    }
    cout << dp[n] << endl;
    return 0;
}
相关推荐
吞下星星的少年·-·29 分钟前
牛客周赛 119B题(贪心)
算法·贪心
NEFU_Jyj39 分钟前
牛客周赛R166(max型瓶颈最短路,前后缀DP合并)
算法·深度优先
Tisfy1 小时前
LeetCode 3644.排序排列:不对则与(脑筋急转弯)
数据结构·算法·leetcode·题解·位运算
lisw052 小时前
分岔论揭示演化突变密码
开发语言·算法·数学建模
aqiu1111112 小时前
C++ TopK:使用 nth_element 快速求最小 K 个数(蓝桥杯 / LeetCode 可用)
算法
Suprman2 小时前
平面排版问题的数学建模与算法设计
算法·数学建模·排序算法·排版套料
FPGA信号处理2 小时前
【应用随机过程】:更新过程与马尔可夫链入门
算法·概率论
重生之小比特3 小时前
【算法拾光】二分查找|在排序数组中查找元素的第一个和最后一个位置 + 搜索旋转排序数组
数据结构·算法·排序算法
吴可可1233 小时前
DXF与AAMA格式转换模块推荐
算法
重生之小比特3 小时前
【算法拾光】二分查找|搜索旋转排序数组 + 寻找旋转排序数组中的最小值
算法