207 条题解

  • 0
    @ 2009-07-28 21:24:30

    program dsa;

    var a,b,c,a1,b1,c1,n,i:integer;

    begin

    a1:=1; b1:=1; c1:=1;

    readln(n);

    a:=2*n;

    b:=n;

    for i:=1 to a do

    a1:=a1*i;

    for i:=1 to b do

    b1:=b1*i;

    c:=a-b;

    for i:=1 to c do

    c1:=c1*i;

    writeln(a1 div (b1*c1) div (n+1));

    end.

  • 0
    @ 2009-07-27 17:10:04

    var h:array[1..16]of real;

    i,n:longint;

    begin

    readln(n);

    h[1]:=1;

    for i:=2 to n do

    h[i]:=(4*i-2)/(i+1)*h;

    writeln(h[n]:0:0);

    end.

    CATALAN数..

  • 0
    @ 2009-07-25 22:00:50

    t:=1;

    readln(n);

    For i:=2*n downto n+1 do

    begin

    t:=t*i;

    t:=t div (2*n+1-i);

    end;

    writeln(t div (n+1));

  • 0
    @ 2009-07-25 13:54:49

    交表流的程序从来不长

    考试的时候要想出卡特兰数列太不现实了

    const

    cln:array[1..15]of longint =

    (1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845);

    var

    n:longint;

    begin

    readln(n);

    writeln(cln[n]);

    end.

  • 0
    @ 2009-07-25 11:37:38

    编译通过...

    ├ 测试数据 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[0..20,0..20]of longint;

    i,j,n:longint;

    begin

    readln(n);

    a[0,0]:=1;

    for i:=1 to n do

    for j:=0 to i do

    a:=a+a;

    writeln(a[n,n]);

    end.

  • 0
    @ 2009-07-25 09:54:21

    楼下的

    告诉你

    他是对的

    他肯定是个强人

    这么短都可以

    我好崇拜哦

  • 0
    @ 2009-07-23 09:46:01

    楼下的,你这么确定?有这么短?

  • 0
    @ 2009-07-23 08:40:39

    PROGRAM LT;

    var

    sum,n:longint;

    procedure pt(x,y:longint);

    begin

    if (x=0)and(y=0)then inc(sum)

    else begin

    if x0 then pt(x-1,y);

    if y0 then pt(x+1,y-1);

    end;

    end;

    begin

    sum:=0;

    readln(n);

    pt(0,n);

    writeln(sum);

    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-07-22 14:43:10

    var

    n,tootle:longint;

    procedure dfs(a,b:longint);

    begin

    if (a=0)and(b=0) then inc(tootle)

    else

    begin

    if a0 then dfs(a-1,b-1);

    if b0 then dfs(a+1,b-1);

    end;

    end;

    begin

    read(n);tootle:=0;

    dfs(0,n);

    write(tootle);

    end.

    原汁原味的DFS....

  • 0
    @ 2009-07-22 09:50:06

    program p1122;

    type

    xx=array[0..20000]of longint;

    var

    a:xx;

    n:longint;

    function cheng(a:xx;m:longint):xx;

    var

    c:xx;

    i:longint;

    begin

    fillchar(c,sizeof(c),0);

    c[0]:=a[0]+4;

    for i:=1 to a[0] do

    begin

    c[i]:=a[i]*m+c[i];

    c:=c[i] div 10 +c;

    c[i]:=c[i] mod 10;

    end;

    while (c[0]>1)and(c[c[0]]=0) do dec(c[0]);

    cheng:=c;

    end;

    function chu(a:xx;m:longint):xx;

    var

    i,p:longint;

    c:xx;

    begin

    fillchar(c,sizeof(c),0);

    c[0]:=a[0];

    p:=0;

    for i:=a[0] downto 1 do

    begin

    p:=p*10+a[i];

    c[i]:=p div m;

    p:=p mod m;

    end;

    while (c[0]>1)and(c[c[0]]=0) do dec(c[0]);

    chu:=c;

    end;

    procedure work;

    var

    i:longint;

    begin

    readln(n);

    a[1]:=1;

    a[0]:=1;

    for i:=2 to n do

    begin

    a:=cheng(a,2*(2*i-1));

    a:=chu(a,(i+1));

    end;

    for i:=a[0] downto 1 do write(a[i]);

    writeln;

    end;

    begin

    work;

    end.

    CATALAN数列

    5000 都可以过,与p1388差不多

  • 0
    @ 2009-07-21 16:33:21

    /*

    ID: talenth1

    PROG:

    LANG: C++

    */

    #include

    #include

    #include

    #include

    const int maxn=20;

    int n;

    __int64 f[maxn][maxn];

    int main()

    {

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

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

    scanf("%d",&n);

    memset(f,0,sizeof(f));

    for(int i=0;i

  • 0
    @ 2009-07-20 16:03:42

    编译通过...

    ├ 测试数据 01:运行超时|无输出...

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

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

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

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

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

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

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

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

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

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

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

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    草,老子的程序。。

    var n:longint;

    begin

    readln(n);

    if n=0 then write('我操你妈');

    if n=1 then write(1);

    if n=2 then write(2);

    if n=3 then write(5);

    if n=4 then write(14);

    if n=5 then write(42);

    if n=6 then write(132);

    if n=7 then write(429);

    if n=8 then write(1430);

    if n=9 then write(4862);

    if n=10 then write(16796);

    if n=11 then write(58786);

    if n=12 then write(208012);

    if n=13 then write(742900);

    if n=14 then write(2674440);

    if n=15 then write(9694845);

    end.

    就是多了一句‘我草你妈’就过了

    你们说puppy是不是欠草??

  • 0
    @ 2009-07-17 17:10:44

    var

    f:array[-1..20]of qword;

    i,j,n:longint;

    begin

    readln(n);

    f[0]:=1;

    for i:=1 to n do

    for j:=0 to i-1 do

    f[i]:=f[i]+f[j]*f;

    writeln(f[n]);

    end.

  • 0
    @ 2009-07-15 20:50:42

    编译通过

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

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

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

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

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

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

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

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

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

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

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

    18就够了 牛!

    program abc(input,output);

    var i,j,n:integer;

    f:array[0..18,-1..18] of longint;

    begin

    readln(n);

    f[0,-1]:=1;

    for i:=0 to n do

    for j:=0 to n-i do

    begin

    if i=0 then f:=f

    else if j=0 then f:=f

    else f:=f+f

    end;

    writeln(f[n,0]);

    readln;

    end.

  • 0
    @ 2009-07-15 19:51:47

    是CATALAN数列啊。。每次操作可以看成是PUSH和POP的一个长度为2*N的排列。。

    而且任何时刻PUSH的总和都不能比POP少(否则就。。。)

    并且两者在排列中数量一样。

    所以把PUSH看成+1,POP看成-1。然后就是+1-1各N个的数列。。并且任何时候部分和(第一项到第K项(K为1..2N))不为负。

    这就是CATALAN数列的经典等价问题啊。。CATALAN(N):=C(2N,N)/(N+1)

  • 0
    @ 2009-07-15 17:04:54

    program dsa;

    var n:integer;

    begin

    read(n);

    if n=1 then write(1);

    if n=2 then write(2);

    if n=3 then write(5);

    if n=4 then write(14);

    if n=5 then write(42);

    if n=6 then write(132);

    if n=7 then write(429);

    if n=8 then write(1430);

    if n=9 then write(4862);

    if n=10 then write(16796);

    if n=11 then write(58786);

    if n=12 then write(208012);

    if n=13 then write(742900);

    if n=14 then write(2674440);

    if n=15 then write(9694845);

    end.

    catalan数列,没什么好说的

  • 0
    @ 2009-09-03 20:43:17

    DP DP DP DP DP DP DP

    呵呵,DP无敌

    ---|---|---|---|---|---|---|--晒程序(1维做的)---|---|---|---|---|---|---|---|---|---|-

    program p1122;

    var

    i,j,n,m:longint;

    f:array[-1..20] of longint;

    begin

    read(n);

    for i:=1 to n do

    f[i]:=1;

    for i:= 1 to n do

    for j:= 0 to n-i do

    f[j]:=f[j-1]+f[j+1];

    writeln(f[0]);

    end.

  • 0
    @ 2009-07-15 14:22:18

    var f:array [0..1000,-5..1000] of longint;

    i,j,k,l,n,m:longint;

    begin

    readln(n);

    for i:=1 to n do

    f[0,i]:=1;

    for i:=1 to n do

    for j:=0 to n-i do

    f:=f+f;

    writeln(f[n,0]);

    end.

  • 0
    @ 2009-07-15 14:14:35

    program zhan;

    var

    f:array[-1..20,-1..20] of longint;

    i,j,k,l,m,n:longint;

    begin

    readln(n);

    for i:=1 to n do

    f[0,i]:=1;

    for i:=1 to n do

    for j:=0 to n-i do

    f:=f+f;

    writeln(f[n,0]);

    end.

    动态规划

  • 0
    @ 2009-07-15 10:09:12

    var n:longint;

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

    function zuo(i,j:longint):longint;

    begin

    if a>0 then exit(a);

    if j=0 then begin a:=zuo(i-1,j+1);exit(a)end;

    if i=0 then begin a:=1;exit(1);end;

    a:=zuo(i-1,j+1)+zuo(i,j-1);exit(a);

    end;

    begin

    read(n);

    writeln(zuo(n,0));

    end.

    这是不是记忆化搜索啊?

信息

ID
1122
难度
2
分类
组合数学 | Catalan数列 点击显示
标签
递交数
4093
已通过
2516
通过率
61%
被复制
22
上传者