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

什么叫没有证明?自己到未名bbs看一下

Posted by frkstyc at 2005-04-22 21:39:46 on Problem 1014
In Reply To:Re:help!!! Posted by:palmtenor at 2005-04-22 21:23:21
> 来来来,贴一个不用那种奇怪的没有证明的结论的真正的DP标程~~`:)
> const
>      n  =6;
> 
> var
>      rock :array[1..n] of longint;
>      opt :array[0..60000] of boolean;
>      print :boolean;
>      mid :longint;
>      r  :integer;
> 
> procedure init;
>      var
>           i :integer;
>      begin
>           mid:=0;
>           print:=true;
>           for i:=1 to n do
>           begin
>                read(rock[i]);
>                mid:=mid+rock[i]*i;
>                if rock[i] mod 2=1 then print:=false;
>           end;
>           readln;
>      end;
> 
> function min(a,b:longint):longint;
>      begin
>          if a<b then min:=a else min:=b;
>      end;
> 
> procedure dp;
>      var
>           max :longint;
>           i :integer;
>           j,k :longint;
>      begin
>           fillchar(opt,sizeof(opt),false);
>           opt[0]:=true;
>           max:=0;
>           print:=true;
>           for i:=1 to n do
>           begin
>               if rock[i]>0 then
>                   for j:=max downto 0 do
>                   if opt[j] then
>                   begin
>                       if opt[mid] then begin writeln('Can be divided.');exit; end;
>                       for k:=1 to rock[i] do
>                       begin
>                            if (j+k*i>mid) or opt[j+k*i] then break;
>                            opt[j+k*i]:=true;
>                       end;
>                   end;
>               max:=max+i*rock[i];
>               if max>mid then max:=mid;
>           end;
>           print:=false;
>      end;
> 
> begin
>      init;
>      r:=0;
>      while mid<>0 do
>      begin
>           inc(r);
>           writeln('Collection #',r,':');
>           if (mid mod 2=0) and not print then
>           begin
>               mid:=mid div 2;
>               dp;
>               if not print then writeln('Can''t be divided.')
>           end else
>               if print then writeln('Can be divided.')
>                        else writeln('Can''t be divided.');
>           writeln;
>           init;
>      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