207 条题解
-
0472792567 LV 7 @ 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. -
02009-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数..
-
02009-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)); -
02009-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. -
02009-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. -
02009-07-25 09:54:21@
楼下的
告诉你
他是对的
他肯定是个强人
这么短都可以
我好崇拜哦 -
02009-07-23 09:46:01@
楼下的,你这么确定?有这么短?
-
02009-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 -
02009-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.... -
02009-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差不多 -
02009-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 -
02009-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是不是欠草?? -
02009-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. -
02009-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. -
02009-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) -
02009-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数列,没什么好说的
-
02009-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. -
02009-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. -
02009-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.
动态规划 -
02009-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.
这是不是记忆化搜索啊?