题解

203 条题解

  • 0
    @ 2009-11-08 15:56:16

    为什么只过了5个点?

    编译通过...

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

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

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

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

    ├ 测试数据 05:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 06:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 07:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 08:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 09:答案错误... ├ 标准行输出

     ├ 错误行输出

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

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

    Unaccepted 有效得分:50 有效耗时:0ms

    var

    i,j,m,n:integer;

    f:array[0..30000]of integer;

    v,w:array[1..25]of integer;

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

    begin

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

    end;

    begin

    readln(n,m);

    for i:=1 to m do

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

    for i:=1 to m do

    for j:=n downto v[i] do

    f[j]:=max(f[j],f[j-v[i]]+v[i]*w[i]);

    writeln(f[n]);

    readln;

    end.

  • 0
    @ 2009-11-08 11:28:34

    var

    t,i,j,m,n,best:integer;

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

    procedure try(k,s,n:integer);

    var

    i:integer;

    begin

    if (nn) then

    begin

    if best

  • 0
    @ 2009-11-07 20:04:25

    编译通过...

    ├ 测试数据 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-11-04 08:33:02

    太菜了,竟然打错了一个字,害我半天没检查出来。

    晾程序了:

    program kaixindejinmin;

    var

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

    b,v:array[0..1000000] of longint;

    i,j,n,t:longint;

    function max(a1,b1:longint):longint;

    begin

    if a1>b1 then max:=a1

    else max:=b1;

    end;

    begin

    readln(t,n);

    for i:=1 to n do

    readln(b[i],v[i]);

    for i:=1 to n do

    for j:=t downto 1 do

    if j

  • 0
    @ 2009-11-01 08:47:39

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

    n:array[0..30000] of longint;

    i,j,m,nn:longint;

    begin

    readln(nn,m);

    for i:=1 to m do

    readln(v[i],p[i]);

    for i:=1 to m do

    for j:=nn downto v[i] do

    if(j>=v[i])and(n[j]

  • 0
    @ 2009-10-27 23:52:54

    拿90分的人,也就是第6个点暴汗的那个问题……

    就是应为没有处理 空间不够大的情况:

    for i:=1 to m do begin

    for j:=n downto 0 do begin

    if(j>=v[i])then

    f[i][j]:=max(f[j],f[j-v[i]]+p[i]*v[i])

    else f[i][j]:=f[j];

    end;

    end;

    千万别少这个:

    else f[i][j]:=f[j];

    否则死的很难看还不知道怎么死的!

    水就是容易淹死人……

  • 0
    @ 2009-10-26 17:05:54

    procedure dp;

    begin

    fillchar(f,sizeof(f),0);

    for i:=1 to m do

    for j:=1 to n do

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

    else f:=f;

    end;

    如果世界上的信息学题目都是0/1背包,那该多好啊,春哥啊!!

  • 0
    @ 2009-10-23 21:08:56

    哎哎( ⊙ o ⊙ )!水啊!!

    。、。。

    。。

    @#!

    var n,m,i,j:longint;

    v,p:array[0..10000] of longint;

    f:array[0..25,0..30000] of longint;

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

    begin if a>b then exit(a) else exit(b); end;

    begin

    read(n,m);

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

    for i:=1 to m do

    for j:=1 to n do

    begin

    if j

  • 0
    @ 2009-10-18 15:39:43

    var

    w,v:array[1..30] of longint;

    a:array[0..30005,0..30] of longint;

    i,j,m,n,x,y:longint;

    begin

    readln(m,n);

    for i:=1 to n do

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

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

    for i:=1 to m do

    for j:=1 to n do

    begin

    x:=a;

    if i>=v[j] then

    begin

    y:=a[i-v[j],j-1]+v[j]*w[j];

    if y>x then

    x:=y;

    end;

    a:=x;

    end;

    writeln(a[m,n]);

    end.

    动态规划 懂吗!!!!!

  • 0
    @ 2009-10-14 19:28:10

    没意思

    。。。

  • 0
    @ 2009-10-01 21:45:16

    那叫一个水啊 一个记忆化搜索 过

    #include

    int f[26][30001];

    int val[26],mon[26],n,m;

    void fun(int,int);

    main()

    {

    freopen ("test.in","r",stdin);

    freopen ("test.out","w",stdout);

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

    int i;

    for (i=1;i=0)

    {

    fun(k-1,money-mon[k]);

    if (f[k-1][money-mon[k]]+mon[k]*val[k]>max)

    max=f[k-1][money-mon[k]]+mon[k]*val[k];

    }

    f[k][money]=max;

    return;

    }

  • 0
    @ 2009-09-20 22:06:48

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

    i,j,v,p,n,m:longint;

    begin

    readln(n,m);

    for i:=1 to m do

    begin

    readln(v,p);

    p:=v*p;

    for j:=n downto v do

    if f[j]

  • 0
    @ 2009-09-20 17:31:34

    背包问题

    可读性强的程序和题解

    http://wwzhwdwd.blog.163.com/blog/static/12815145020098205296613

  • 0
    @ 2009-11-06 19:53:02

    转移方程

    f[j]:= max(f[j],f[j-v[i]] + v[i]*p[i]);

  • 0
    @ 2009-09-19 01:23:39

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    楼下的不如写个深搜

    {我这样有意思么……}

    var

    n,m,i,j,sum,ans,money:longint;

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

    procedure search(i:longint);

    var i1:longint;

    begin

    for i1:=i+1 to m do

    if money+a[i1,1]ans then ans:=sum;

    search(i1);

    money:=money-a[i1,1];

    sum:=sum-a[i1,2];

    end;

    end;

    begin

    readln(n,m);

    for i:=1 to m do

    begin

    read(a,a);

    a:=a*a;

    end;ans:=0;

    for i:=1 to m do

    if aans then ans:=sum;

    search(i);

    end;

    writeln(ans);

    end.

  • 0
    @ 2009-09-18 19:38:32

    编译通过...

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

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

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

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

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

    ├ 测试数据 06:答案错误... ├ 标准行输出

     ├ 错误行输出

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

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

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

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

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

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

    为什么?

  • 0
    @ 2009-09-15 21:47:01

    4000AC

  • 0
    @ 2009-09-02 20:03:41

    话说这题裸搜都能过,25个东西,枚举每一个要与不要,2^25 才400W,

  • 0
    @ 2009-08-15 12:40:28

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program ex52;

    var i,x,m,n,k,l:longint;

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

    w,c:array[0..2000]of longint;

    begin

    fillchar(f,sizeof(f),0);

    readln(m,n);

    for i:=1 to n do

    begin

    readln(w[i],l);

    c[i]:=w[i]*l;

    end;

    for i:=1 to n do

    for x:=m downto w[i] do

    if f[x-w[i]]+c[i]>f[x] then f[x]:=f[x-w[i]]+c[i];

    writeln(f[m]);

    readln;

    end.

  • 0
    @ 2009-08-13 15:06:40

    var sum:array[0..100,0..30000] of longint;

    i,j,m,n:longint;

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

    function max(q,w:longint):longint;

    begin

    if q>w then max:=q

    else max:=w;

    end;

    begin

    readln(n,m);

    for i:=1 to m do

    begin

    readln(a,a);

    a:=a*a;

    end;

    fillchar(sum,sizeof(sum),0);

    for i:=1 to m do

    for j:=1 to n do

    begin

    if j>=a then sum:=sum+max(sum,sum[i-1,j-a]+a)

    else sum:=sum;

    end;

    writeln(sum[m,n]);

    readln;

    end.

    第一次单独DP,AC了,哈哈哈!!!

信息

ID
1317
难度
3
分类
动态规划 | 背包 点击显示
标签
递交数
6628
已通过
3339
通过率
50%
被复制
31
上传者