Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

HELP!!!!!!!为什么我的程序总是超时,有没有什么好方法剪枝?

Posted by mikegreen7892003 at 2006-06-29 23:06:51 on Problem 1187
program p1187;
var
  l1,l2,l3,d:integer;
  f,p,q1,q2:array[0..10,0..10,0..10,0..30] of longint;
procedure main;
  var
    i1,i2,i3,temp,j1,j2,j3,temp1:integer;
  begin
    p[0,0,0,0]:=1;
    for i1:=0 to l1 do
      for i2:=0 to l2 do
        for i3:=0 to l3 do
          for temp:=1 to d do
            if temp<i1+i2+i3 then
              begin
                if i3<>0 then
                  f[i1,i2,i3,temp]:=p[i1,i2,i3-1,temp-1]
                else
                  if i2<>0 then
                    f[i1,i2,i3,temp]:=p[i1,i2-1,i3,temp-1]
                  else
                    if i1<>0 then
                      f[i1,i2,i3,temp]:=p[i1-1,i2,i3,temp-1];
                p[i1,i2,i3,temp]:=f[i1,i2,i3,temp];
                for j1:=0 to i1 do
                  for j2:=0 to i2 do
                    for j3:=0 to i3 do
                      p[i1,i2,i3,temp]:=(p[i1,i2,i3,temp]+f[j1,j2,j3,temp]*q2[i1-j1,i2-j2,i3-j3,temp-1]+q1[j1,j2,j3,temp-1]*p[i1-j1,i2-j2,i3-j3,temp]+f[j1,j2,j3,temp]*p[i1-j1,i2-j2,i3-j3,temp]) mod 11380;
                q1[i1,i2,i3,temp]:=(q1[i1,i2,i3,temp-1]+f[i1,i2,i3,temp]) mod 11380;
                q2[i1,i2,i3,temp]:=(q2[i1,i2,i3,temp-1]+p[i1,i2,i3,temp]) mod 11380;
             end
            else
              if temp=i1+i2+i3 then
                begin
                    f[i1,i2,i3,temp]:=1;
                    p[i1,i2,i3,temp]:=1;
                    q1[i1,i2,i3,temp]:=q1[i1,i2,i3,temp-1]+1;
                    q2[i1,i2,i3,temp]:=q2[i1,i2,i3,temp-1]+1;
                end
              else
                begin
                  q1[i1,i2,i3,temp]:=q1[i1,i2,i3,temp-1];
                  q2[i1,i2,i3,temp]:=q2[i1,i2,i3,temp-1];
                end;
  end;
begin
  readln(l3,l2,l1,d);
  fillchar(f,sizeof(f),0);fillchar(p,sizeof(p),0);
  fillchar(q1,sizeof(q1),0);fillchar(q2,sizeof(q2),0);
  if l1+l2+l3<d then writeln(0)
  else
    begin
      main;
      writeln(p[l1,l2,l3,d]);
    end;
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator