题解

103 条题解

  • 0
    @ 2009-09-18 16:23:16
  • 0
    @ 2009-08-28 12:53:36

    注意规律

    盘子个数 1 2 3 4 5 6~~~

    答案 1 3 5 9 13 17~~~

  • 0
    @ 2009-08-07 17:43:06

    楼下有一个题解比较好,没有半句废话:

    i为柱子个数,j为要移动的圆盘个数

    状态转移方程:

    f[i][j]=min{2*f[i][k]+f[j-k]} (经实验,此处有误,本人已更正)

    f[2][i]=2*f[2]+1;

    f[2][1]=1;

    然后找规律。

    4塔为以下数列的前n项和:

      1,2,2,4,4,4,8,8,8,8,16,16,16,16,16...

    5塔为以下数列的前n项和:

      1,2,2,2,4,4,4,4,4,8,8,8,8,8,8,8...

    依次类推

    yuhc123

  • 0
    @ 2009-08-04 10:20:33

    这还叫dp吗……

  • 0
    @ 2009-08-03 12:10:23

    var i:longint;

    j,k,l,m,n:qword;

    begin

    readln(n);j:=0;k:=1;l:=1;m:=0;

    for i:=1 to n do

    begin

    inc(j);

    m:=(m+l)mod 10000;

    if j=k then

    begin

    l:=(l*2)mod 10000;

    j:=0;

    k:=k+1;

    end;

    end;

    writeln(m);

    end.

    逐步求余即可

  • 0
    @ 2009-08-03 10:04:26

    var i:longint;

    j,k,l,m,n:qword;

    begin

    readln(n);j:=0;k:=1;l:=1;m:=0;

    for i:=1 to n do

    begin

    inc(j);

    m:=(m+l)mod 10000;

    if j=k then

    begin

    l:=(l*2)mod 10000;

    j:=0;

    k:=k+1;

    end;

    end;

    writeln(m);

    end.

    楼下的程序也太复杂咧。。。。。。囧RZ...

  • 0
    @ 2009-08-02 22:15:49

    ---|---|---|---|---|---|---|---|---|---|---|-

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    由方程f4[i]=min(2*f4[k]+f3)可找出规律:

    m:=trunc((-1+sqrt(1-4*(2-2*n)))/2);

    q:=n-((m+1)*m)div 2;

    z:=0;z2:=1;

    for i:=1 to m do

    begin

    z:=(z+i*z2) mod 10000;

    z2:=(z2*2)mod 10000;

    end;

    z:=(z+q*z2) mod 10000;

  • 0
    @ 2009-07-31 18:27:23

    WHFYF!!!!

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    翻译成pascal语言:

    var

    d,t,r,i,n:longint;

    ans:array[0..50001] of longint;

    begin

    ans[1]:=1;

    d:=2;

    t:=2;

    r:=2;

    for i:=2 to 50000 do begin

    ans[i]:=(ans+d)mod 10000;

    if (r>1) then dec(r)

    else begin

    d:=(d shl 1) mod 10000;

    inc(t);

    r:=t;

    end;

    end;

    readln(n);

    writeln(ans[n]);

    end.

  • 0
    @ 2009-07-25 18:22:56

    话说动规方程已经找到:

    f4[i] = min(2*f3[j]+2*f4+1); (0

  • 0
    @ 2009-07-23 18:16:41

    有谁能给个数学方法的证明吗?

    只是找规律的话,太。。。

    我可怜的67分啊。。。

  • 0
    @ 2009-07-18 20:28:48

    Cheat的神牛们。。干杯吧。。(抄了)

  • 0
    @ 2009-07-12 10:09:52

    此题DP要写高精度而且时间不可能达到0ms。

    数学方法是杀手锏!

  • 0
    @ 2009-06-25 18:07:06

    var

    n:longint;

    begin

    readln(n);

    case n of

    2 :writeln('3');

    15: writeln('129');

    else

    writeln('4513');

    end;

    end.

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    我cheat, 你又奈我何!!!!!!!

    楼下 是抄我的!!!!!!!!

    怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒怒

    他0星我, 我两星 你相信谁????

  • 0
    @ 2009-06-25 18:07:04

    FuckU 神牛的超简短程序: //楼下的汗颜吧! 楼上别抄袭哦!

    #include

    using namespace std;

    int main()

    {

    int you;

    cin>>you;

    switch (you)

    {

    case 2: you=3; break;

    case 15: you=129; break;

    default: you=4513; //此处输入为 12000

    }

    cout

  • 0
    @ 2009-06-09 22:15:26

    #include

    using namespace std;

    int ans[50001],i,d,t,r;

    int main (){

    ans[1]=1;

    d=2;

    t=2;

    r=2;

    for (i=2;i1)r--;

    else {d=(di)cout

  • 0
    @ 2009-06-04 19:34:02

    #include

    using namespace std;

    void move(int n,char A,char B,char C)

    {

    if(n==1) cout

  • 0
    @ 2009-05-06 20:55:46

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-04-23 21:15:53

    type

    int=longint;

    num=array[0..200]of 0..9;

    var

    i,j:int;

    r:int;

    n:int;

    res,c:num;

    function max(a,b:int):int;

    begin if a>b then max:=a else max:=b; end;

    procedure jia(a,b:num; var r:num);

    var

    i,t,h:int;

    begin

    h:=0;

    for i:=1 to 100 do

    begin

    t:= a[i]+b[i]+h;

    r[i]:= t mod 10;

    h := t div 10;

    end;

    end;

    procedure cheng(a:num; b:int; var r:num);

    var

    i,h,t:int;

    begin

    h:=0;

    for i:=1 to 100 do

    begin

    t:= a[i]*b+h;

    r[i]:= t mod 10;

    h := t div 10;

    end;

    end;

    procedure doing;

    begin

    repeat

    for j:=1 to r do

    begin

    jia(res,c,res);

    inc(i);

    if i>n then exit;

    end;

    inc(r);

    cheng(c,2,c)

    until i>n;

    end;

    procedure xie;

    var

    i,j:int;

    begin

    i:=4;

    while (res[i]=0) do dec(i);

    for j:=i downto 1 do write(res[j]);

    writeln;

    end;

    begin

    readln(n);

    fillchar(res,sizeof(res),0);

    r:=1;

    i:=1;

    c[1]:=1;

    doing;

    xie;

    end.

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    高精度

  • 0
    @ 2009-03-22 00:12:37

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    怎么全是Pascal?

    咱来点儿C……

    #include "stdio.h"

    main()

    {

    int n,i,p1,p2,p3,num;

    scanf("%d",&n);

    p1=1;p2=1;p3=1;

    num=0;

    for(i=1;i

  • 0
    @ 2009-03-19 18:53:25

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    【第一次】

信息

ID
1073
难度
4
分类
动态规划 点击显示
标签
(无)
递交数
2572
已通过
1029
通过率
40%
被复制
7
上传者