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