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

求大神查错WA,不胜感激!

Posted by 348009205 at 2016-07-22 11:26:27 on Problem 3211
const maxn=50010;
type
  xy=record
    t:longint;
    c:string;
  end;
var
  f:array[0..105,0..maxn] of boolean;
  a:array[0..105] of xy;
  s,s1:string;
  n,m,i,j,ans,sum,p,st:longint;
  o:char;

procedure sort(l,r:longint);
var i,j:longint; mid:string[11]; t:xy;
begin
  i:=l; j:=r; mid:=a[(l+r) div 2].c;
  repeat
    while a[i].c<mid do inc(i);
    while a[j].c>mid do dec(j);
    if i<=j then
      begin
        t:=a[i]; a[i]:=a[j]; a[j]:=t;
        inc(i); dec(j);
      end;
  until i>j;
  if l<j then sort(l,j);
  if i<r then sort(i,r);
end;

function clover(st,en:longint):longint;
var i,j,sum,tm:longint;
begin
  f[st-1,0]:=true; sum:=0;
  for i:=st to en do sum:=sum+a[i].t;
  tm:=sum div 2;
  for i:=1 to tm do f[st-1,i]:=false;
  for i:=st to en do
    for j:=0 to tm do
      begin
        if f[i-1,j] then f[i,j]:=true;
        if (j>=a[i].t)and(f[i-1,j-a[i].t]) then f[i,j]:=true;
      end;
  for i:=tm downto 0 do
    if f[en,i] then exit(sum-i);
end;

begin
  //assign(input,'1.in');reset(input);
  readln(m,n);
  while m+n>0 do
    begin
      fillchar(f,sizeof(f),false);
      readln(s);
      for i:=1 to n do readln(a[i].t,o,a[i].c);
      sort(1,n);
      ans:=0; st:=1;
      for i:=1 to n do
        if a[i].c<>a[i+1].c then
          begin
            ans:=ans+clover(st,i);
            st:=i+1;
          end;
      writeln(ans);
      readln(m,n);
    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