题解

257 条题解

  • 0
    @ 2009-02-25 21:56:01

    #include

    int main(void) {

    char words[2000][76];

    int max[2000],n,i,j,k,maxv=0;

    scanf("%d",&n);

    for(i=0;i=max[i]-1;j--) if(max[j]>=max[i]) {

    for(k=0;words[j][k];k++) if(words[j][k]!=words[i][k]) break;

    if(!words[j][k]) max[i]=max[j]+1;

    }

    if(maxv

  • 0
    @ 2009-02-21 20:38:26

    祝贺第2100个AC!

  • 0
    @ 2009-02-15 08:04:59

    注意啊 判断后一个是否包含前一个时要用

    pos(a[i],a[j])=1

    而不要用

    pos(a[i],a[j])0

    改前50 改后ac

  • 0
    @ 2009-02-04 21:48:31

    我导弹写太多了,五分钟搞定这题

  • 0
    @ 2009-01-30 20:13:11

    没做时感觉不容易,做了之后才发现它很水……

    program tt;

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

    a:array[1..2000]of string;

    b:array[1..2000]of integer;

    begin

    readln(n);

    for i:=1 to n do begin

    b[i]:=1;

    readln(a[i]);

    end;

    for i:=2 to n do

    for j:=1 to i-1 do

    if length(a[j])b[i] then

    b[i]:=b[j]+1;

    end;

    m:=0;

    for i:=1 to n do

    if b[i]>m then m:=b[i];

    writeln(m);

    readln;

    end.

    编译通过...

    ├ 测试数据 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-01-21 08:55:40

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    var

    a:array[1..2000]of string;

    b:array[1..2000]of longint;

    n,i,j:longint;

    begin

    readln(n);

    for i:=1 to n do

    readln(a[i]);

    for i:=1 to n do

    b[i]:=1;

    for i:=2 to n do

    for j:=1 to i-1 do

    if (pos(a[j],a[i])=1)and(b[j]+1>b[i])

    then b[i]:=b[j]+1;

    j:=1;

    for i:=1 to n do

    if b[i]>j

    then j:=b[i];

    write(j);

    end.

    数据太弱了。动规也可以过。

  • 0
    @ 2008-12-20 10:55:34

    不用太麻烦直接做都能秒

  • 0
    @ 2008-12-18 09:54:15

    O(n)用栈搞定

  • 0
    @ 2008-12-12 17:15:05

    这个题还是用一维的动态规划比较好。

  • 0
    @ 2008-12-06 15:30:36

    编译通过...

    ├ 测试数据 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-12-01 19:17:51

    挺简单的啊,AC~~

  • 0
    @ 2008-11-27 19:53:42

    你可以在这里写上你的解题思路或者解题方法等但规定要求不能贴出任何有关于此题的程序代码

    var s:array[1..2000] of string; st:string; n,i,j,tot:longint;procedure search(a,b:longint);var i:integer;begin if b>tot then tot:=b; for i:=a+1 to n do if pos(s[a],s[i])=1 then search(i,b+1);end;begin readln(n); tot:=1; for i:=1 to n do readln(s[i]); for i:=1 to n-1 do for j:=i+1 to n do if length(s[i])>length(s[j]) then begin st:=s[i]; s[i]:=s[j]; s[j]:=st; end; for j:=1 to n do search(j,1) ;{DP100分} writeln(tot);end.

    var s:array[1..2000] of string; st:string; n,i,j,tot:longint; f:array[1..2000] of longint;begin readln(n); for i:=1 to n do readln(s[i]); for i:=1 to n do f[i]:=1; for i:=2 to n do for j:=1 to i-1 do begin if (pos(s[j],s[i])=1) and (f[i]tot then tot:=f[i]; writeln(tot);{搜索90分}end.

  • 0
    @ 2008-11-13 21:15:57

    最后一个点怎么回事啊

    编译通过...

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

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

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

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

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

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

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

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

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

    ├ 测试数据 10:运行时错误...|错误号: -1073741571

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

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

    program code;

    var

    i,j,k,l,n,r,max:integer;

    s:char;

    st:string;

    a:array[0..1001]of string;

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

    procedure init;

    begin

    readln(n);

    for i:=1 to n do

    begin

    readln(a[i]);

    end;

    end;

    function judge(a,b:string):boolean;

    begin

    if pos(b,a)=1 then exit(true) else

    exit(false);

    end;

    procedure main;

    var s1,s2:string;

    begin

    for i:=1 to n do

    f[i]:=1;

    max:=0;

    for i:=1 to n do

    for j:=1 to i-1 do

    if (f[i]max then max:=f[i];

    end;

    end;

    begin

    init;

    main;

    writeln(max);

    end.

  • 0
    @ 2008-11-13 09:13:26

    非常容易理解的题解 很讨厌有人写难以理解的题解

    procedure init;

    var i:longint;

    begin

    assign(input,'mojiao.in');

    reset(input);

    readln(n);

    for i:=1 to n do

    readln(a[i]);

    close(input);

    end;

    procedure done;

    var i,j,max,t:longint;

    begin

    max:=0;

    t:=1;

    for i:=1 to n do f[i]:=1;

    for i:=1 to n do

    begin

    for j:=1 to n do

    if ij then

    if pos(a[j],a[i])=1 then inc(t);

    if t>max then max:=t;

    t:=1;

    end;

    write(max);

    end;

  • 0
    @ 2008-11-11 15:29:00

    大家可以写个二十六叉树试试..

    高效..搞笑..!!

  • 0
    @ 2008-11-11 13:29:05

    program code;

    var str:array[1..2000] of string;

    n,i,j,k:longint;

    a:array[1..2000] of longint;

    begin

    readln(n);

    for i:=1 to n do

    readln(str[i]);

    for i:=1 to n do

    a[i]:=1;

    for i:=2 to n do

    for j:=1 to i-1 do

    if (pos(str[j],str[i])=1) and (a[i]a[1] then

    a[1]:=a[i];

    writeln(a[1]);

    end.

  • 0
    @ 2008-11-11 10:16:45

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    water problem!~~ 经典的最长子序列

  • 0
    @ 2008-11-09 17:06:40

    就是一最长上升子序列。。。把判断语句稍微改那么一点点。。。水题啊

    编译通过...

    ├ 测试数据 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-09 11:22:31

    program Ltr;

    var i,j,m,n,tmp,max:longint;

    a:array[1..2000] of string;

    f:array[1..2000] of integer;

    begin

    readln(n);

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

    for i:=1 to n do begin

    max:=0;

    for j:=1 to i-1 do begin

    tmp:=pos(a[j],a[i]);

    if tmp=1 then

    if f[j]>max then max:=f[j];

    end;

    f[i]:=max+1;

    end;

    max:=0;

    for i:=1 to n do if f[i]>max then max:=f[i];

    writeln(max);

    end.

  • 0
    @ 2008-11-08 15:24:51

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    还是用动态规划作比较好

    转移方程:f[i]:=max(f[j])+1 (i>j>0)

信息

ID
1028
难度
4
分类
动态规划 | LIS 点击显示
标签
(无)
递交数
6000
已通过
2434
通过率
41%
被复制
9
上传者