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; }

 

posted @ 2013-07-31 23:35  EtheGreat  阅读(184)  评论(0编辑  收藏  举报