您的位置:首页 > 其它

ural 1073. Square Country

2015-12-25 20:01 716 查看
原文链接:https://www.geek-share.com/detail/2662044860.html

1073. Square Country

Time limit: 1.0 second
Memory limit: 64 MB 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.

Sample

inputoutput
344
3
Problem Author: Stanislav Vasilyev
Problem Source: Ural State Univerisity Personal Contest Online February'2001 Students Session Tags: dynamic programming  (hide tags for unsolved problems) Difficulty: 161   题意:给出x,问要多少个完全平方数相加才能得到x。 分析:dp可以解决这个问题。 dp[i]表示i最少要多少个来组成、 dp[i] = min(d[i - j*j] + 1)   但是这题有更简单的做法。 根据定理,仍和正整数可以有四个完全平方数组成。 所以说最多四个数。 这样直接暴力即可。 当然,我是弱智,做的时候没有想到。  
1 /**
2 Create By yzx - stupidboy
3 */
4 #include <cstdio>
5 #include <cstring>
6 #include <cstdlib>
7 #include <cmath>
8 #include <deque>
9 #include <vector>
10 #include <queue>
11 #include <iostream>
12 #include <algorithm>
13 #include <map>
14 #include <set>
15 #include <ctime>
16 #include <iomanip>
17 using namespace std;
18 typedef long long LL;
19 typedef double DB;
20 #define MIT (2147483647)
21 #define INF (1000000001)
22 #define MLL (1000000000000000001LL)
23 #define sz(x) ((int) (x).size())
24 #define clr(x, y) memset(x, y, sizeof(x))
25 #define puf push_front
26 #define pub push_back
27 #define pof pop_front
28 #define pob pop_back
29 #define ft first
30 #define sd second
31 #define mk make_pair
32
33 inline int Getint()
34 {
35     int Ret = 0;
36     char Ch = ' ';
37     bool Flag = 0;
38     while(!(Ch >= '0' && Ch <= '9'))
39     {
40         if(Ch == '-') Flag ^= 1;
41         Ch = getchar();
42     }
43     while(Ch >= '0' && Ch <= '9')
44     {
45         Ret = Ret * 10 + Ch - '0';
46         Ch = getchar();
47     }
48     return Flag ? -Ret : Ret;
49 }
50
51 const int N = 60010;
52 int n;
53 int dp
;
54
55 inline void Input()
56 {
57     cin >> n;
58 }
59
60 inline void Solve()
61 {
62     dp[0] = 0, dp[1] = 1;
63     for(int i = 2; i <= n; i++)
64     {
65         dp[i] = INF;
66         for(int j = 1; j <= i / j; j++)
67             if(dp[i] > dp[i - j * j] + 1)
68                 dp[i] = dp[i - j * j] + 1;
69     }
70     cout << dp
 << endl;
71 }
72
73 int main()
74 {
75     freopen("e.in", "r", stdin);
76     Input();
77     Solve();
78     return 0;
79 }
View Code

 

转载于:https://www.cnblogs.com/StupidBoy/p/5076836.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: