题目地址:Ural 1073
DP水题。也能够说是背包。
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; const int INF=0x3f3f3f3f; #define LL long long int dp[60006]; int main() { int i, j, n; memset(dp,INF,sizeof(dp)); dp[0]=0; for(i=1;i<250;i++) { for(j=i*i;j<=60000;j++) { dp[j]=min(dp[j],dp[j-i*i]+1); } } while(scanf("%d",&n)!=EOF) printf("%d ",dp[n]); return 0; }