URAL 1073Square Country

来源:互联网 发布:android软件 编辑:程序博客网 时间:2024/06/08 16:33
There live square people in a square country. Everything in this country is square also. Thus, the Square Parliament has passed a law about a land. According to the law each citizen of the country has a right to buy land. A land is sold in squares, surely. Moreover, a length of a square side must be a positive integer amount of meters. Buying a square of land with a side a one pays a2 quadrics (a local currency) and gets a square certificate of a landowner.
One citizen of the country has decided to invest all of his N quadrics into the land. He can, surely, do it, buying square pieces 1 × 1 meters. At the same time the citizen has requested to minimize an amount of pieces he buys: "It will be easier for me to pay taxes," — he has said. He has bought the land successfully.

Your task is to find out a number of certificates he has gotten.


Input

The only line contains a positive integer N ≤ 60 000 , that is a number of quadrics that the citizen has invested.

Output

The only line contains a number of certificates that he has gotten.


这个题目木有甚么难度,简单的dp 就好了 对于当前的体积状态, 最小的土地数就是 买下就j*j的一块前的土地数目加1


                                       dp [i] = min(dp[i] , dp[i-j*j] +1);




#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;#define N 60010int dp[N];int n;int main(){    for(int i = 0; i <= 60000; i++)        dp[i] = i;    for(int i = 1; i <= 60000; i++)    {        for(int j = 1; j <= 60000; j++)        {            if(i - j*j >=0)            {                dp[i] = min(dp[i] , dp[i-j*j]+1);            }            else                break;        }    }    while(scanf("%d",&n)!=EOF)    {        printf("%d\n",dp[n]);    }    return 0;}



0 0
原创粉丝点击