249 条题解

  • 0
    @ 2009-10-06 16:06:55

    #include

    int u[1000][1000],m[1000][1000];

    sunpig(int a,int b)

    {

    if(a

  • 0
    @ 2009-10-06 11:16:38

    简单DP,不过要看清楚每个点可以从哪个点来.

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    var

    i, j, n, tx, ty : longint;

    a : array[1 .. 1000, 1 .. 1000] of longint;

    v : array[1 .. 1000, 1 .. 1000] of longint;

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

    begin

    if a = 0 then exit(b);

    if a < b then exit(a) else exit(b);

    end;

    begin

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

    readln(n);

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

    v[n][1] := a[n][1];

    for i := n downto 1 do

    begin

    if i < n then

    begin

    tx := i + 1;

    for j := 1 to i do

    begin

    ty := j + 1;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    ty := j;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    if j = 1 then

    begin

    ty := i + 1;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    end;

    if j = i then

    begin

    ty := 1;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    end;

    end; end;

    tx := i;

    for j := 1 to i do

    begin

    ty := j - 1;

    if ty = 0 then ty := i;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    end;

    for j := i downto 1 do

    begin

    ty := j + 1;

    if ty > i then ty := 1;

    v[i][j] := min(v[i][j], v[tx][ty] + a[i][j]);

    end;

    end;

    writeln(v[1][1]);

    end.

  • 0
    @ 2009-10-03 20:39:22

    从左下角出发!

  • 0
    @ 2009-10-01 23:39:26

    ..SPFA就行了。

    建图太囧了。看了半天才看懂到底哪些能走哪些不能走。。。

  • 0
    @ 2009-09-17 07:46:14

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    一测得了90分,死在第7个点上,无语到无与伦比的境界....

    看了大牛的数据才知道: 战胜自己的心魔我才能更强大!

    这个点我想到了呀!可是打的时候漏掉了....

  • 0
    @ 2009-09-14 19:20:43

    出题的人的描述需要更准确点...否则不看题解不可能做的出来...

  • 0
    @ 2009-09-16 19:20:36

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    类似于 小胖办证

    分层的去DP。。

    左右扫2遍。。头尾特殊情况特殊处理。

    一直推到顶即可。。

    (无语。。我一直错一直错。。。后来才发现。。。

    有处F打成了F。。。晕。。。

    静态查错是很重要的。。。。。。。)

    题解 http://254117343.blog.163.com/

  • 0
    @ 2009-09-05 18:43:25

    var

    i,j,n:longint;

    a,f:array[1..1000,1..1000]of longint;

    begin

    read(n);

    for i:=1 to n do

      for j:=1 to n do

       read(a);

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

    for i:=1 to n do

      for j:=0 to n do

       begin

        f:=f;

        if (j>=1) and (f+a>f) then

         f:=f+a[i];

       end;

    writeln(f[n,n]);

    end.

  • 0
    @ 2009-09-05 15:32:20

    编译通过...

    ├ 测试数据 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-09-04 19:52:23

    var n,i,j,k:integer;

    a,f:array[0..1001,0..1001] of longint;

    flag:boolean;

    function min(x,y:longint):longint;

    begin

    if x>y then min:=y

    else min:=x;

    end;

    begin

    readln(n);

    for i:=1 to n do

    for j:=1 to i do

    read(a);

    for i:=2 to n do a:=a;

    f[n,1]:=a[n,1];

    for i:=2 to n do f[n,i]:=f[n,i-1]+a[n,i];

    f[n,n]:=min(f[n,n],a[n,n]+f[n,1]);

    for i:=n-1 downto 1 do f[n,i]:=min(f[n,i],a[n,i]+f[n,i+1]);

    for i:=n-1 downto 1 do

    begin

    for j:=1 to i do f:=a+min(f,f);

    f:=min(f,a+f);

    f:=min(f,a+f);

    f:=f;f:=f;

    for k:=1 to i do

    begin

    flag:=true;

    for j:=1 to i do

    if min(f,f)+a

  • 0
    @ 2009-09-01 21:29:27

    终于AC了,555555555~~~~~~~~~~~~

    这题方程真的好想,但做起来很烦………………- -!

    我被绕进去了,这题不光考DP,还有耐心和语文水平…………

    Orz myself,我居然忘了是从左下角开始了,白交了一次

  • 0
    @ 2009-08-31 17:07:27

    原来看题解看得都没信心写了。。

    写完一次ac真高兴

    膜拜某数据

    细心很重要

  • 0
    @ 2009-08-29 09:40:56

    无限鄙视出题人......

  • 0
    @ 2009-08-27 17:26:36

    program p1006;

    var

    f,min1,min2:array[0..1001] of longint;

    a:array[0..1001,0..1001] of integer;

    i,j,n,mm:integer;

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

    begin

    if a>b then a:=b;

    min:=a;

    end;

    begin

    read(n);

    read(a[1,1]);

    for i:=0 to n do f[i]:=10000;

    f[1]:=a[1,1];

    for i:=2 to n do

    begin

    f[0]:=f;

    for j:=1 to i do read(a);

    f[i]:=min(f,f[1])+a;

    for j:=i-1 downto 1 do f[j]:=min(f[j],f[j-1])+a;

    mm:=1;

    for j:=1 to i do if f[j]

  • 0
    @ 2009-08-26 16:59:12

    #include

    #define MIN(x,y) (x>y)?y:x

    #define DP_N 2      

    using namespace std;

    int n,a[1001][1001],b[1001][1001],minNum,minI;

    int main()

    {

    int i,j,k;

    cin>>n;

      for(i=1;ia[i][j];

      b[i][j]=a[i][j];

      }

      

      for(i=2;i

  • 0
    @ 2009-08-21 18:28:22

    BS死出题人了

    什么意思。。。。。

    ???

    挂了一下午...

  • 0
    @ 2009-08-20 09:55:00

    同一层,左扫右扫要从最小值开始。

    其实可以用扫两遍来解决

  • 0
    @ 2009-08-19 12:05:22

    题目所说的走法很不清楚,甚至有的是错的。

    本人经过多次参考,终于总结出了较为完整、准确的走法:

    可走的方向是左、右、左上、正上方(而不是右上)。

    每一层第1段可以到本层、上一层、下一层的最后一段。

    每一层最后一段可以到本层、上一层、下一层的第1段。

    对于每一层第1段可以到本层的最后一段,每一层最后一段可以到本层的第1段,可以正反搜一遍。

    f[i][1] = min(f[i][1],f[i][i]+map[i][1]);

    for(k=2;k0;k--) {

    f[i][k] = min(f[i][k],f[i][k+1]+map[i][k]);

    }

  • 0
    @ 2009-08-18 10:40:46

    世界上这种题目多了..我的AC率就没办法上去.- -

    注意特判

    f:=min(f,f,f)+a;

    f:=min(f,f,f)+a;

  • 0
    @ 2009-08-17 18:15:54

    (╰_╯)#

    (╰_╯)#(╰_╯)#

    (╰_╯)#(╰_╯)#(╰_╯)#

    (╰_╯)#(╰_╯)#(╰_╯)#(╰_╯)#

    题目怎么能这样!

    我理解错了

信息

ID
1006
难度
6
分类
动态规划 点击显示
标签
递交数
8992
已通过
2077
通过率
23%
被复制
26
上传者