Square Country

原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1073

分析:dp,dp[i]表示钱为i且恰好用完时能买的最少土地数,易知dp[i]=min(i,dp[i-j*j]+1)(1<=j<=sqrt(i)).

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#define ll long long
#define maxn 60005
using namespace std;
int dp[maxn];
void solve()
{
     memset(dp,0,sizeof(dp));
     dp[0]=0;dp[1]=1;dp[2]=2;dp[3]=3;dp[4]=1;
     for(int i=5;i<=60000;i++)
     {
     	dp[i]=i;
     	for(int j=1;j*j<=i;j++)
     	dp[i]=min(dp[i],dp[i-j*j]+1);
     }
}
int main()
{
     int n;
     solve();
     cin>>n;
     cout<<dp[n]<<endl;
return 0; }
原文地址:https://www.cnblogs.com/i-love-acm/p/3229082.html