题解 | 最少的完全平方数
最少的完全平方数
https://www.nowcoder.com/practice/4b2f5d4c00f44a92845bdad633965c04
#include <bits/stdc++.h> //动态规划的思想用存储前面计算过的东西,加以利用 //完全平方数可以多次使用,类似完全背包,正好等于n的时候的用值最少 using namespace std; #define N (int)(1e4+5) int dp[N]; //体积为完全平方数的值 int volume[N]; //价值全部为1 int my_min(int a,int b){ return (a<b)?a:b; } //正序 int main(){ int n,v; scanf("%d",&n); v=(int)sqrt(n); for(int i=1;i<=v;i++){ volume[i]=i*i; } for(int i=1;i<=n;i++) { dp[i]=INT_MAX; } for(int i=1;i<=v;i++) { for(int j=volume[i];j<=n;j++) { dp[j]=my_min(dp[j],dp[j-volume[i]]+1); } } printf("%d\n",dp[n]); return 0; }#动态规划#