249 条题解

  • 0
    @ 2009-11-05 10:11:27

    编译通过...

    ├ 测试数据 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-11-08 10:34:41

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    我晕,Sunny居然害我没秒杀!!!

    我气死了

    交了无数次

    原来要来回扫两次

    有哪位神牛可以给出证明为什么不要扫三遍不?

  • 0
    @ 2009-11-03 00:19:24

    是有环的DP。

    先通过下一层求出本层的值。 再在本层向两个方向更新最小值。

    如果当成图论题,用DIJKSTRA 可能过不了。

  • 0
    @ 2009-11-01 16:47:58

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    EASY评测

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    SUNNY评测

    怀念PUPPY= =顺便ORZ秒杀大牛

    裸DP

    每层从下往上、从最小的从左向右

    再从最小的从右向左~

  • 0
    @ 2009-10-31 21:13:19

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    用SPFA实现方程转移

    #include

    #define mm 1000010

    using namespace std;

    int f[1001][1001],v[1001][1001],a[1001][1001],n,lx[mm],ly[mm];

    void init(){

    scanf("%d",&n);

    for (int i=1;i

  • 0
    @ 2009-10-30 20:12:50

    题目描述的山其实就是一个圆形的嘛,讲得不清不楚的。

    自底向上DP, 先生成自底向上所有情况的数组F,再寻找最小数,然后分别向左,向右到头,到尾修改F一次,再返回修改F一次。 这样就对了.最底下一行的初始化很重要,注意要从(1,1) 开始

    这题交了好多次, 竟然把对f的特殊处理写成了 if j-1=0 then j:=i;

    失败啊,要不然就一次AC了。

    现在才发现其实静态查错也是很重要的。

    编译通过...

    ├ 测试数据 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-10-30 10:53:31

    自底向上的dp,dp到一层时得到的是次优状态,对于当前的这一层,运用bellman-ford宽搜得到最优状态!

  • 0
    @ 2009-10-28 20:41:06

    来回搜

    注意细节

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

    广东实验中学观光团到此一游

  • 0
    @ 2009-10-27 16:06:04

    来回扫一次, 只能90分。

    所以,再扫一次。。。。

    AC....

  • 0
    @ 2009-10-26 12:53:32

    过了

  • 0
    @ 2009-10-25 15:30:43

    编译通过...

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

     ├ 错误行输出

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

     ├ 错误行输出

    ├ 测试数据 03:答案错误...

     ├ Hint: 注意:每个点最多只有四个出发的方向,但不代表最多只有四个到达的方向! ├ 标准行输出

     ├ 错误行输出

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

     ├ 错误行输出

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

     ├ 错误行输出

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

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

     ├ 错误行输出

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

     ├ 错误行输出

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

     ├ 错误行输出

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

     ├ 错误行输出

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

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

    一直想不通为什么。。后来原来时初始化F[1,1]=1!!了郁闷

    改了一次AC。。

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    为什么我都没有上面人士给出的HINT呢?不懂。。

    总之时秒杀了//爽!

  • 0
    @ 2009-10-25 15:29:06

    第一次:没考虑每行最后一段可以走到本行行首和更高一行行首,20分

    第二次:来回扫一次,90分,第7个点WA

    第三次:怒,来回再扫一次,AC了。。。

  • 0
    @ 2009-10-21 22:50:45

    过的第一道这种要来回DP的题 一次AC

    var

    i,j,n,mi,now,k:longint;

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

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

    begin

    if a

  • 0
    @ 2009-10-15 20:34:32

    program sunpig;

    var

    n:integer;

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

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

    begin

    if a>b then exit(b)

    else

    exit(a);

    end;

    procedure init;

    var

    i,j:longint;

    begin

    readln(n);

    for i:=1 to n do

    begin

    for j:=1 to i do

    read(a);

    readln;

    end;

    end;

    procedure dp;

    var

    i,t,j,k:longint;

    begin

    for i:=1 to n do

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

    for i:=2 to n do

    begin

    f[n,i]:=f[n,i-1]+a[n,i];

    if i=n then

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

    end;

    for i:=n-1 downto 1 do

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

    for i:=n-1 downto 1 do

    begin

    for j:=1 to i do

    begin

    if j=1 then

    begin

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

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

    end else

    if j=i then

    begin

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

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

    end else

    begin

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

    end;

    end;

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

    for t:=2 to i do

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

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

    for t:=i-1 downto 1 do

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

    end;

    end;

    procedure print;

    begin

    writeln(f[1,1]);

    end;

    begin

    init;

    dp;

    print;

    end.

    这道题要注意,真正的步法是左、右、上、左上,不能往右上走。

    每层第一个,可以到达更高一层的最后一个,每层最后一个可以到达更高一层的第一个。

  • 0
    @ 2009-10-14 20:32:41

    program p1006;

    var

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

    i,j,n :integer;

    procedure cut;

    var

    t:integer;

    flag:boolean;

    begin

    flag:=true;

    while flag do

    begin

    flag:=false;

    for j:=1 to i do

    if b>b[i,j mod i+1]+a then

    begin

    b:= b[i,j mod i +1]+a;

    flag:=true;

    end;

    for j:=i downto 1 do

    begin

    if j=1 then t:=i else t:=j-1;

    if b>b+a then begin b:=b+a;

    flag:=true; end;

    end;

    end;

    end;

    procedure dp;

    var

    t:integer;

    begin

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

    for i:=2 to n do

    b[n,i]:=b[n,i-1]+a[n,i];

    i:=n;

    cut;

    for i:=n-1 downto 1 do

    begin

    j:=1; if b>b then

    if b>b then b:=a+b

    else b:=a+b

    else

    if b>b then b:=a+b

    else b:=a+b;

    j:=i; if b>b then

    if b>b then b:=a+b

    else b:=a+b

    else

    if b>b then b:=a+b

    else b:=a+b;

    for j:=2 to i-1 do

    if b>b then b:=a+b else b:=a+b;

    cut;

    end;

    end;

    begin

    read(n);

    for i:=1 to n do

    for j:=1 to i do

    read(a);

    dp;

    write(b[1,1]);

    end.

    哪位大牛告诉我,我的为什么过不了第十个点?

  • 0
    @ 2009-10-12 23:20:46

    经过艰辛的调试,我的程序终于过了!!我开始松弛操作用的小于等于,一直丑着。哎,细节决定成败呀!!!

    用的spfa,思路不是动归。

    /*

    ID: talenth1

    PROG: 1006

    LANG: C++

    */

    #include

    #include

    #include

    #include

    const int maxn=500501;

    int h,n,d[maxn],dh[]={0,0,-1,-1,0},dl[]={0,-1,-1,0,1};

    int que[maxn],times[maxn],head=0,tail=1;

    struct enode{

    int v,s;

    enode * link;

    };

    enode elist[maxn];

    int min(int x,int y)

    {

    if(xv]&&relax(vi,p->v,p->s)){

    tail++;

    if(tail>n)tail=1;

    que[tail]=p->v;

    times[p->v]++;

    if(times[p->v]>n){check=false;break;}

    }

    p=p->link;

    }

    visited[vi]=false;

    }

    }

    int main()

    {

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

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

    int top;

    scanf("%d",&h);

    n=0;

    for(int i=1;i

  • 0
    @ 2009-10-12 18:32:41

    三百二十章再度崛起

    “嘿,回复了又能怎样?这仅剩的最后一半时间,难道你就想炼制出超过我鼎中的丹药?哈哈,做事可得量力而为啊,否则,徒惹人笑话罢了哈哈”冷笑着望着萧炎,炎利讥讽道。

    笑了笑,萧炎并未理会他的嘲讽话语,袖袍轻挥,一股劲气将面前石台上的漆黑灰烬吹得开去,手指轻弹纳戒,顿时,一大堆的药材,再度摆满了石台。

    身体笔直的站在石台之前,萧炎双手缓缓伸探而出,略微沉寂之后,一丝青色火苗,从他身体之上冒腾了出来,然后粘附着衣服表面,当第一缕青色火苗出现之后不久,一团团火焰,开始接连不断的从萧炎体内涌出,到得最后,青色火焰居然完全将萧炎包裹在了里面,熊熊青色升腾燃烧,将之渲染成了一个青色火人。

    “些全部都是异火么?操纵这么多的异火,那需要多庞大的灵魂力量?”广场之上,一众炼药师目瞪口呆的望着那几乎变成一个火人的萧炎,忍不住的吸了一口凉气。

    在萧炎身体上升腾起青火时,那正准备收丹的小公主与柳翎,也是被震得愣了下来,另外一旁的炎利,虽然脸色控制得极好,不过他那眼皮,却也是在此刻猛跳了起来,他想不明白,在经历了这种打击之后,这位年轻人,为什么还能够发挥出这般让人膛目惊舌地能力

    “这个小家伙魂力量,似乎比先前强大了很多啊高台上,法犸惊诧的望着全身被包裹在火焰中的萧炎,欣慰的声音中略微有些艳羡:“他选择了正确的渠道,在压力中,获得了突破,这种雄浑的灵魂力量,即使公会中的一些长老,也难以比喻,他这次获不小!”

    众所周知,炼药师地灵魂力量,并不能主动修炼,它只能随着时间的增加而变得雄浑,当然,万事无绝对,凡事都有着例外,在庞大的斗气大陆之上,并不乏一些机缘不错之人,则是能够因为好运,而身处各种奇异状态中,在那种玄之又玄的状态之下,运气好的人,便是能获得灵魂力量大增地赏赐,现在萧炎所表现出来的这种,便是与那情况,极为的相似,故而,就是连法犸这种炼丹大师,也忍不住的有些羡慕。

    “现在他还有胜利的机会么?”海波东抚着胡须,笑着问道。

    “不知道”微微摇了摇头,法犸轻叹道:“还是那句话,一切都得看岩枭的表现了虽然如今状态奇佳,可对方也不是省油的灯啊,这一次,恐怕又是一场凶险的龙争虎斗了。”

    “他要开始炼制了海波东微微点了点头。望着场中地眼睛忽然一亮。

    广场之上。全身被包裹在火焰之上地萧炎。手掌缓缓抬起。一股澎湃地青色火焰从指间处暴涌而出。旋即灌进药鼎之中。眨眼时间。汹涌地火焰。便是在鼎内翻腾着燃烧了起来。

    凝望着药鼎中地火焰。萧炎手指轻弹。石台之上。几株药材。被他同时使用巧劲扇进了药鼎。顿时。青火涌上。将之包裹而进。然后开始了疯狂地焚烧与提炼。

    此次萧炎地提炼。明显速度比刚才快上了许多。而且出手间。也再没有了那种畏手畏脚地谨慎之感。操控着异火时。也再无半点迟疑。举手投足间。隐隐有着许些从容不迫地气质。而这种气质。一般只会出现在那些经验极为丰富地炼丹大师身上。比如。法犸

    一株株药材被萧炎丢掷而进。然后另外一只手。控制着将鼎中所提炼而出地精华材料。装盛进入玉瓶之中。在这般双手齐用。灵魂力量开至巅峰地情况下。石台之上所摆放地药材。正在以一个喜人地速度。迅速转换成炼制三纹青灵丹地精华材料

    萧炎的再次振作炼丹,无疑是掀起了广场上的一波**,先前因为他地失败,而借机成为无数人寄托于希望的小公主与柳翎,已经因为实力不济,而逊色了炎利一筹,所以,在这种眼睁睁看着对方就欲取得本国冠军之时,原本最负骑王地萧炎的再度崛起,无疑是让得无数观众大松了一口气,因此,那广场两边席位之上地无数道目光,此时,几乎是全部的射向了广场中被包裹在青色火焰之中地人影,震耳欲聋的欢呼声,响彻着广场。

    “哼”听得那些喧闹的欢呼声,炎利阴冷的眸子瞟了萧炎所在的方向一眼,望着他那行云流水般的炼制,眼中终于是掠过了一抹惊异与凝重,从对方忽然变得强大的灵魂力量以及从容的气度上来看,炎利心中清楚,这个年轻人不仅未被这次的失败打击得一蹶不振,反而是在绝地中取得了突破种心

    种定力,实在是有些可怕。

    “这个家伙果然还是有些底子,就是不知道究竟是哪个老家伙方才能够调教出这种学生?看他的表现,明显比那古河的弟子要优秀许多,嘿,丹王古河之名,也不尽属实啊,至少在教导学生这一项上,便是远远不如别人心中冷笑了一声,炎利将目光转回了自己那火焰熊熊的药鼎之中,透过药鼎的那透明镜面,他能够清楚的瞧见,那一枚在火焰中滴溜溜旋转的丹药雏形。

    “快了要成功了”望着那即将成丹的雏形,炎利精神为之一振,稚嫩的面庞上,隐隐浮现一抹得意,他对自己所炼制的丹药,有着绝对的信心!

    被包裹在火焰中的修长双手,不住的在石台上闪移着,而随着双手的快速移动,石台上的药材正在迅速减少着,而在另外一旁,装盛着精华材料的玉瓶,却是越来越多了起来。

    此时的小公主与柳翎所炼制的丹药皆是已经成型,手掌一召间,便是将从药鼎中射飞而出的丹药装进了玉瓶之中,望着那不断从炎利药鼎中渗透而出的有色丹香,两人都是有些郁闷的低叹了一口气,旋即抬头,将目光也是投注向了萧炎所在的位置,现在,他又成为了那唯一有着许些机会超过炎利的人了。

    加玛帝国炼药师大会的这次冠军之位,究竟花落谁家,便是要看萧炎的发挥了

    然而,在所有人都不可发现的青色火焰之下,若是有人此刻能够看见的话,定然会感觉到目瞪口呆,因为那外界看上去似乎处于巅峰状态的萧炎,此时,却是紧闭着眸子,微蹙着眉头,看上去犹如是介入了一种似睡似醒的奇异状态之中。

    然而虽然眼睛的确是闭上了,可在萧炎的感知中,外界的一举一动,却是几乎是比用肉眼看还要更加清晰,药鼎之中,澎湃的灵魂力量,让得他甚至能够极为明了的看见药材被火焰焚烧后,逐渐支离破碎,最后在高温中,留下了他所需要的某种精华材料

    心中缓缓舒了一口气,萧炎能够感觉到,这一次的炼丹,是他至今为止,在未曾依靠着药老半点能力前提下,发挥得最为巅峰与完美的一次,在这状态之下,萧炎甚至有着敢与五品炼药师一争高低的豪情。

    药鼎中那些被包裹在青色火焰中的药材,几乎是随着萧炎的心意翻转着,异火的温度,在此刻甚至是被他控制得与药方所记载的火候,分毫不差

    “提炼完毕某一刻,石台上的材料终于被再度完全提炼,萧炎那紧闭的眼眸,这才缓缓睁开,身体略微沉寂了瞬间,袖袍猛然挥动,一股劲气将面前的二十多个玉瓶震得轰然爆裂,无形的劲气,将里面的精华材料吸取而起,然后全部投注进入药鼎之内,火焰立刻再度汹涌

    这一次,萧炎的提炼时间,足足比上次缩短了将近一半之多

    药鼎之中,青火翻腾,二十几种精华材料,在萧炎灵魂力量的寸寸包裹之下,缓缓的融合着。

    时间,犹如流水一般,悄悄的从指尖划过,而此时,距离比赛结束时间,已经仅仅只有不到一个小时时间,另外一边的炎利,药鼎中所渗透而出的有色丹香,也是越来越浓,显然,他所炼制的丹药,即将要成形了!

    “三纹青灵丹,要成功了

    紧盯着场中的法犸,某一刻,忽然低声说了一句,不过他的脸庞上,却并未有着轻松的表情,因为他知道,仅仅依靠普通三纹青灵丹,根本不可能胜过炎利!

    广场中,青火翻涌的药鼎,忽然猛的一静,一股淡淡丹香,飘散而出,一枚犹如翡翠般的青色浑圆丹药,在鼎内不断的旋转着。

    随着丹药的旋转,那包裹在萧炎身体表面的青色火焰忽然开始了急速搜索,眨眼时间,青色火焰便是犹如潮水一般,退回了萧炎体内,而在当鼎内青火也即将完全消退之时,萧炎微微嚼动的嘴巴猛的一张,一口紫色火焰,再度狂喷而出,然后灌注进了药鼎之内。

    望着那再度喷出紫火的萧炎,法犸的心在这一刻骤然提了起来,眼睛死死的盯着萧炎所在的方向。

    这一次,若是再失败,冠军之位,则将与萧炎彻底无缘!而届时,炼药师公会的名声,也将会因此而大受损害!

    (回家了,明天会码三更或者三更以上,来补偿上次还未还完的四更,另外,新的一周,请诸位看完更新后,顺手投点推荐票吧,每日一投,良好习惯,谢谢了

  • 0
    @ 2009-10-11 15:26:11

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    很简单的dp,可以从上到下,上、上左、右、左各搜就可

    头尾处理

    f:=f;

    f:=f;

  • 0
    @ 2009-10-10 21:33:14

    #include"stdio.h"

    #include"string.h"

    int s[10001][10001]={0,};

    int dp[10001][1001]={0,0};

    int main()

    {

    int n;

    int i;

    int j;

    int min;

    while(EOF!=scanf("%d",&n))

    {

    for(i=1;i=1)//right

    dp[i][j]=s[i][j]+dp[i][j-1];

    if(dp[i][j]>s[i][j]+dp[i][j+1]&&j+1

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

    一次AC!!!

信息

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