/ Vijos / 题库 / 采药 /

题解

303 条题解

  • 0
    @ 2009-07-18 14:28:29

    const

    maxm=30000; maxn=25;

    type ar=array[1..maxn] of integer;

    var m,n,j,i:integer;

    c,w:ar;

    f:array[0..maxn,0..maxm] of longint;

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

    begin

    if x>y then max:=x else max:=y;

    end;

    begin

    readln(m,n);

    for i:= 1 to n do

    readln(w[i],c[i]);

    for i:=1 to m do f[0,i]:=0;

    for i:=1 to n do f:=0;

    for i:=1 to n do

    for j:=1 to m do

    begin

    if j>=w[i] then f:=max(f+c[i],f)

    else f:=f;

    end;

    writeln(f[n,m]);

    end.

  • 0
    @ 2009-07-17 19:26:00

    编译通过...

    ├ 测试数据 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-07-17 08:49:36

    program dsa;

    var t,m,i,j:longint;

    p,v:array[1..100] of longint;

    a:array[0..1000] of longint;

    begin

    fillchar(a,sizeof(a),0);

    read(t,m);

    for i:=1 to m do read(p[i],v[i]);

    for i:=1 to m do

    for j:=t downto p[i] do if a[j]

  • 0
    @ 2009-07-14 11:51:23

    include

    long f[3003];

    int main ()

    {

    int i,t,j,m,x,y;

    scanf("%d %d",&t,&m);

    for(i=1;i=x;j--)

    if(t>=x)

    if(f[j]>f[j-x])

    f[j]=f[j-x]+y;

    else

    f[j]=f[j];

    }

    printf("%d",f[t]);

    getchar();getchar(); return 0;

    }

  • 0
    @ 2009-07-13 00:27:32

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    NOI专刊上有。

  • 0
    @ 2009-07-05 20:48:55

    program p2773;

    var

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

    i,j,t,m,ti,pi:integer;

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

    begin

    if x>=y then max:=x else max:=y;

    end;

    begin

    fillchar(a,sizeof(a),0);

    readln(t,m);

    for i:=1 to m do

    begin

    readln(ti,pi);

    if ti

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

    这题目难度二...

    以前的评判标准太差了

  • 0
    @ 2009-07-04 09:52:43

    program p1104;

    const maxn=1001;

    var

    f:array[0..maxn]of longint;

    i,j,a,b,m,n:longint;

    begin

    readln(n,m);

    for m:=1 to m do

    begin

    readln(a,b);

    for j:=n downto a do

    if f[j-a]+b>f[j]

    then f[j]:=f[j-a]+b;

    end;

    writeln(f[n]);

    end.

  • 0
    @ 2009-07-03 12:53:10

    AC biao cheng;

    jin gong can kao;

    thank you!

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program P1104;

    var

    t,m,i,j :longint;

    a :array[1..100 ,1..2]of longint;

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

    begin

    readln(t,m);

    for i:=1 to m do readln(a,a);

    for i:=1 to m do

    for j:=t downto a do

    if ans[j]

  • 0
    @ 2009-06-24 18:23:08

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    额——

    01背包,基本上不用改

  • 0
    @ 2009-06-21 10:05:38

    编译通过...

    ├ 测试数据 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-06-18 17:02:33

    A星算法,计算600次=AC

  • 0
    @ 2009-06-07 21:41:44

    数组设定要足够,01背包问题

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

    Accepted 有效得分:0.0000001有效耗时:

  • 0
    @ 2009-05-31 17:54:51

    什么叫内存溢出?

  • 0
    @ 2009-05-29 12:39:25

    标准的01背包问题

  • 0
    @ 2009-05-19 17:28:40

    const maxn=1001;

    var f:array[0..maxn]of longint;

    i,j,a,b,m,n:longint;

    begin

    readln(n,m);

    for m:=1 to m do begin

    readln(a,b);

    for j:=n downto a do

    if f[j-a]+b>f[j]then f[j]:=f[j-a]+b;

    end;

    writeln(f[n]);

    end.

  • 0
    @ 2009-05-12 23:13:39

    经典0/1背包问题, 完全可以写成一维的

    f[j]=max(f[j-t[i]]+v[i], f[j]}

    注意i: 1~n, 而j则应该从m ~ t[i]反向扫描即可.

    不能正向扫描.如果本身资源可以重复,倒可以正向扫描,正好形成累加效果.

  • 0
    @ 2009-05-12 08:17:34

    编译通过...

    ├ 测试数据 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-05-09 21:48:44

    var

    i,j,m,t:integer;

    bao:array [0..1000,0..1000] of integer;

    tt,mm:array [0..1000] of integer;

    begin

    read(t,m);

    readln;

    for i:=1 to m do

    begin

    read(tt[i],mm[i]);

    readln;

    end;

    fillchar(bao,sizeof(bao),0);

    for i:=1 to m do

    begin

    for j:=1 to t do

    begin

    bao:=bao;

    if (tt[i]

  • 0
    @ 2009-05-07 13:29:26

    var

    {  }max,l:longint;

    {  }a,b,n,t,t1,v1:integer;

    {  }value:array[0..10000] of boolean;

    {  }time:array[0..10000] of integer;

    { }begin

    {  }readln(t,n);

    {  }fillchar(value,sizeof(value),false);

    {  }value[0]:=true;

    {  }for a:=1 to 10000 do

    {  } time[a]:=10000;

    {  }for a:=1 to n do

    {  } begin

    {    }readln(t1,v1);

    {    }max:=max+v1;

    {    }for b:=max downto v1 do

    {    } if value=true then

    {      }begin

    {      } if time>time+t1 then time:=time+t1;

    {      } if time

信息

ID
1104
难度
4
分类
动态规划 | 背包 点击显示
标签
递交数
16859
已通过
6541
通过率
39%
被复制
39
上传者