给定一个数n,求这个数最少由几个完全平方数相加得到。
状态转移方程:dp[i] = ∑dp[i-j*j]+1.
#include <cstdio>
#include <algorithm>
const int maxn = 60000 + 5;
const int inf = maxn;
int dp[maxn];
int main(int argc, char const *argv[]) {
int n;
scanf("%d", &n);
dp[0] = 0;
for (int i = 1; i <= n; i++) {
dp[i] = inf;
for (int j = 0; j * j <= i; j++) {
dp[i] = std::min(dp[i], dp[i-j*j] + 1);
}
}
printf("%d\n", dp[n]);
return 0;
}
本文探讨了如何求解一个整数最少可以由多少个完全平方数相加组成的问题,并给出了一个动态规划算法实现,通过状态转移方程dp[i]=∑dp[i-j*j]+1来寻找最优解。
368

被折叠的 条评论
为什么被折叠?



