测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A30362. 小杨和整数拆分

填空题 困难

题目描述

小杨和整数拆分

题目描述

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

小杨请你编写程序计算出总和为 n 的完全平方数的最少数量。

输入格式

第一行包含一个正整数 n,含义如题目所示。

输出格式

输出一个整数,代表总和为 n 的完全平方数的最少数量。

输入样例

18

输出样例

2

18=9+9=16+1+1,其中最少需要2个完全平方数。

对于全部数据,保证有 1≤n≤100000。

参考答案

#include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int n; int dp[N]; int main() { cin>>n; for (int i=1;i<=n;i++) { dp[i]=i; for (int j=1;j<=sqrt(i);j++) { dp[i] =min(dp[i-j*j]+1,dp[i]); } } cout<<dp[n]<<"\n"; }
上一题 下一题