回 帖 发 新 帖 刷新版面

主题:[NOIP热身竞赛]方砖问题(顶楼公布正解)

有一块n*n的大方砖(2<=n<=10000), 现要将其分成m块小正方形砖, 求m的最小值.
输入(bricks.in):
本题有多组测试数据, 每组测试数据占1行, 每行为一个数n.
输出(bricks.out):
每组输出占1行, 每行为一个数m.
样例输入:
2
3
5
9999
样例输出:
4
6
8
6

正解:
program lx;
  var
    i, n, p, min:word;
  function calc(m, n:word): word;
    begin
      if n=0 then
        calc:=0
      else
        calc:=m div n + calc(n, m mod n);
    end;
  begin
    while not seekeof do begin
      readln(n);
      min:=maxint;
      if n=1 then p:=1;
      for i:=1 to n div 2 do begin
        p:=2+calc(n-i, i) shl 1;
        if min>p then min:=p;
      end;
      writeln(min);
    end;
  end.

回复列表 (共30个回复)

沙发

只要使m个完全平方数的和等于n*n,并且这些完全平方数尽可能大,但要注意超边长问题,其中不能有几个正方形的边长之和超过m。

板凳

m能不能是1?

3 楼

楼上的:

当然可以。

不过m也不是越大越好:比如n=6时:(每个方砖里的数十这个方砖的面积m)

                       — — — — — —
                      |              |_1|
                      |              |_1|
                      |       25     |_1|
                      |              |_1|
                      |______________|_1|
                      |_1|_1|_1|_1|_1|_1|
就没有

             — — — — — —       — — — — — —
            |           |  4  |     |        |        |
            |     16    |_____|     |    9   |    9   |
            |           |  4  | 和  |________|________|
            |___________|_____|     |        |        |
            |  4  |  4  |  4  |     |    9   |    9   |
            |_____|_____|_____|     |________|________|
用的方砖少。

4 楼

这个问题其实不是很复杂的......

5 楼


怎么做啊??还有,如果是长方形怎么办??

6 楼

当n=3时m应为6吧.

7 楼

貌似动归可以..

8 楼

[quote]貌似动归可以..[/quote]

不需要用动态规划......

9 楼

真的吗??????????
我现在只想到用动规的方法..............~~~真晕~~~~~~~~~~~```

10 楼


…………表刺激我!!
动归怎么做呀??我只想到回溯。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册