题解

244 条题解

  • 0
    @ 2009-06-11 21:10:25

    记得对输入数据进行排序!!!!!!

    没排序的程序:

    编译通过...

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

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

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

    ├ 测试数据 04:答案正确... 228ms

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

    ├ 测试数据 06:答案正确... 321ms

    ├ 测试数据 07:答案正确... 633ms

    ├ 测试数据 08:运行超时...

    ├ 测试数据 09:运行超时...

    ├ 测试数据 10:运行超时...

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

    Unaccepted 有效得分:70 有效耗时:1182ms

    排序后:

    编译通过...

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

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

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

    ├ 测试数据 04:答案正确... 87ms

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

    ├ 测试数据 06:答案正确... 150ms

    ├ 测试数据 07:答案正确... 321ms

    ├ 测试数据 08:答案正确... 415ms

    ├ 测试数据 09:答案正确... 508ms

    ├ 测试数据 10:答案正确... 696ms

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

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

  • 0
    @ 2009-06-11 20:06:47

    递推就可以完成这题

    program test;

    var n,i,j,k,m:word;

    a:array[1..100]of word;

    f:array[0..2000,0..2000]of boolean;

    begin

    readln(n);

    for i:=1 to n do read(a[i]);

    readln;

    for k:=1 to n do

    begin

    for i:=m downto 0 do

    for j:=m-i downto 0 do

    if fthen begin f[i,j+a[k]]:=true;f[i+a[k],j]:=true;end;

    f[a[k],0]:=true;

    f[0,a[k]]:=true;

    inc(m,a[k]);

    end;

    for i:=m downto 0 do if f then begin writeln(i);break;end;

    if i=0 then writeln('Impossible');

    end.

    总耗时2400ms

  • 0
    @ 2009-05-01 17:55:01

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    @ 2009-04-26 21:16:29

    var

    i,j,k,n,t,s:integer;

    a,b,c:array[0..2000]of integer;

    f:array[0..2000]of boolean;

    function max(x,y:integer):integer;

    begin

    if x>y then exit(x) else exit(y);

    end;

    begin

    read(n);

    t:=1;

    fillchar(f,sizeof(f),false);

    a[1]:=0;

    fillchar(b,sizeof(b),0);

    fillchar(c,sizeof(c),0);

    f[0]:=true;

    for i:=1 to n do

    begin

    read(k);

    s:=t;

    for j:=1 to s do

    begin

    if not f[abs(k-a[j])] then

    begin

    inc(t);

    a[t]:=abs(k-a[j]);

    f[a[t]]:=true;

    end;

    if not f[k+a[j]] then

    begin

    inc(t);

    a[t]:=k+a[j];

    f[a[t]]:=true;

    end;

    c[abs(k-a[j])]:=max(max(max(b[a[j]],k),b[abs(k-a[j])]),c[abs(k-a[j])]);

    c[k+a[j]]:=max(max(k+b[a[j]],b[k+a[j]]),c[k+a[j]]);

    end;

    for j:=1 to t do

    b[a[j]]:=c[a[j]];

    end;

    if b[0]=0 then writeln('Impossible') else writeln(b[0]);

    end.

  • 0
    @ 2009-04-19 21:03:04

    咿兮呼……终于过了此水题……DP方程不再多说,底下的人都说得很好……另:

    如果出现Wa On Test #5的诡异错误,那把f[0,x]的

    初值定得小点……我就是这么错的……

  • 0
    @ 2009-04-17 12:24:54

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    通过自己的努力AC。f[i][j]表示前i个塔中任选,两塔差距为j时,较矮的那个的最大高度。

  • 0
    @ 2009-03-18 19:55:45

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    好吧 很弱的一题 扫水时初始化竟然扫掉2个百分点 滚动数组导致访问错误 OTZ

  • 0
    @ 2009-03-14 19:42:11

    bool f[i][j]表示高塔高i矮塔高j的情况是否可以出现,当前的水晶为c[i],这种情况可以由f[j]推来,不过如果i-c[i]小于j,就是从f[j]推来的了;还可以从f[i][j-c[i]]推来。三重循环

    for i=1; i=0

    for k=j; k>=0

    里面两层倒序是为了防止重取,[]里的数都不能小于零,除非你想小囧一下……

    程序写出来还算简洁,就是时间猥琐了点:

    有效耗时:790ms

  • 0
    @ 2009-03-02 13:17:49

    错第一个点的注意:不要忘记考虑加了高度以后 高塔和矮塔交换的情况

    吃多了果然做不出题目

  • 0
    @ 2009-02-17 13:35:27

    program p1037;

    var f:array[0..2000]of boolean;

    a:array[1..100]of integer;

    n,i,j,h:integer;

    begin

    readln(n);

    fillchar(f,sizeof(f),false);

    for i:=1 to n do

    read(a[i]);

    h:=0;f[0]:=true;

    for i:=1 to n do

    begin

    h:=h+a[i];

    for j:=h downto a[i] do

    if f[j-a[i]] then f[j]:=true;

    end;

    i:=1001;

    repeat

    dec(i);

    until (i=0) or ((f[i]) and (f));

    if i=0 then writeln('Impossible')

    else

    writeln(i);

    end.

    我的程序..

    用这种做法显然是有问题的 当水晶是1 1 5 8时他的最大高度是7

    而7有只有5+1+1

    但是却过了9个点

    剩一个不可能情况过不了..

    大家看一下怎么改 谢谢了

  • 0
    @ 2009-02-10 21:05:55

    program t7;

    var

    max,i,j,n:longint;

    a:array[0..101,0..1000]of integer;

    b,c:array[0..1000]of boolean;

    h,l:array[0..100]of longint;

    pn,p,pz:array[0..10000]of integer;

    procedure fuz;

    begin

    l[0]:=1;

    p[1]:=0;

    for i:=0 to n do

    for j:=0 to (max+1)div 2 do

    a:=-1;

    a[0,0]:=0;

    end;

    begin

    readln(n);

    for i:=1 to n do

    begin

    read(h[i]);

    max:=max+h[i];

    end;

    fillchar(b,sizeof(b),false);

    fuz;

    for i:=0 to n-1 do

    begin

    for j:=1 to l[i] do

    begin

    if p[j]>=h then

    begin

    if (a[i+1,p[j]-h]

  • 0
    @ 2009-01-29 20:08:01

    #include

    #include

    using namespace std;

    int main (void)

    {

    int n;

    cin>>n;

    int a[n+1],i,j,k=0;

    for (i=1;i>a[i];k+=a[i];}

    int f[n+1][k+1];

    for (i=0;i

  • 0
    @ 2008-12-06 17:41:17

    var

    f:array[0..100,0..2000]of integer;

    n,m,i,j,k:integer;

    a:array[1..100]of integer;

    function max(x,y,z:integer):integer;

    begin

    max:=x;

    if max

  • 0
    @ 2008-11-30 13:59:07

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    注意初始化和边界

    ***|Hpec killed P1037 with knife

  • 0
    @ 2008-11-26 15:36:11

    vijos的测评机就是神奇

    提交了四次都超时,但我坚信总有一次会过

    所以,第五次:

    编译通过...

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

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

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

    ├ 测试数据 04:答案正确... 72ms

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

    ├ 测试数据 06:答案正确... 41ms

    ├ 测试数据 07:答案正确... 197ms

    ├ 测试数据 08:答案正确... 291ms

    ├ 测试数据 09:答案正确... 275ms

    ├ 测试数据 10:答案正确... 353ms

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

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

  • 0
    @ 2008-11-22 22:29:22

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    很经典问题。

  • 0
    @ 2008-11-13 21:48:07

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    好可惜啊。。。没有看到IMPOSSIBLE这个东西。。。

  • 0
    @ 2008-11-13 15:37:25

    Vijos Dragon

    var dat:array[1..100] of longint;

    data:array[0..100,-2000..2000] of boolean;

    result:array[1..100,-2000..2000] of integer{longint};

    n,i,j:longint;

    空间占用很大,可是....

    编译通过...

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

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

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

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

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

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

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

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

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

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

  • 0
    @ 2008-11-13 08:49:07

    vijos puppy万岁!!!!!!!!!!!!!!!!!!!!

    编译通过...

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

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

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

    ├ 测试数据 04:答案正确... 119ms

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

    ├ 测试数据 06:答案正确... 134ms

    ├ 测试数据 07:答案正确... 353ms

    ├ 测试数据 08:答案正确... 525ms

    ├ 测试数据 09:答案正确... 478ms

    ├ 测试数据 10:答案正确... 634ms

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

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

    …………………………危险…………………………

    下面是tiger:

    编译通过...

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

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

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

    ├ 测试数据 04:答案正确... 244ms

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

    ├ 测试数据 06:答案正确... 259ms

    ├ 测试数据 07:答案正确... 541ms

    ├ 测试数据 08:答案正确... 791ms

    ├ 测试数据 09:答案正确... 806ms

    ├ 测试数据 10:运行超时...

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

    Unaccepted 有效得分:90 有效耗时:2641ms

    一样的程序………………………………

  • 0
    @ 2008-11-12 21:13:45

    感谢ra224大牛

信息

ID
1037
难度
6
分类
动态规划 | 背包 点击显示
标签
(无)
递交数
10570
已通过
2750
通过率
26%
被复制
16
上传者