没什么好说的,把bit打包到byte里,其实我以前一直以为boolean是1 bit。比赛的时候写挂了。
Codevar n,i,j,h,t:integer; dis,Q:array[1..1000] of integer; map:array[0..125000] of byte; ch:char; procedure setbit(u,v:longint); var t:longint; begin t:=(u-1)*n+v; map[t>>3]:=map[t>>3] or(1<<(t and 7)); end; function getbit(u,v:longint):boolean; var t:longint; begin t:=(u-1)*n+v; if((map[t>>3]>>(t and 7))and 1)=1 then exit(true) else exit(false); end; begin readln(N); for i:=1 to N do begin dis[i]:=-1; for j:=1 to N do begin read(ch); if(ord(ch)<>ord('0')) then setbit(i,j); end;readln;end; h:=0;t:=1;Q[1]:=1;dis[1]:=0; while h<t do begin inc(h); for i:=1 to n do begin if(getbit(Q[h],i)) and(dis[i]=-1) then begin dis[i]:=dis[Q[h]]+1; inc(t);Q[t]:=i; end;end;end; writeln(dis[n]); end.
行列不影响。乱搞。
Codeprogram mc; const maxn=700; var A:array[1..maxn,1..maxn] of longint; R,C:array[1..maxn] of longint; i,j,n,k,x,y:longint; ch:char; procedure swap(var x,y:longint); var t:longint;begin t:=x;x:=y;y:=t;end; begin readln(n,k); for i:=1 to n do begin for j:=1 to n do read(A[i][j]); readln;R[i]:=i;C[i]:=i; end; while k>0 do begin readln(ch,x,y); case ch of 'A':writeln(A[R[x]][C[y]]); 'R':swap(R[x],R[y]); 'C':swap(C[x],C[y]); end; dec(k);end; end.
F[i]表示做i,序列长度为偶数的最大的权值,G[i]为奇数。50分做法。
G[i]:=F[i-1]
F[i]:=max(F[i-1](删掉B[i]),max{G[j]+A[j]*B[i](保留B[i])})
斜率优化什么的无力了。
Codeprogram pair; uses math; const maxn=1000000; var f,g:array[0..maxn] of int64; A,B:array[1..maxn] of int64; ans:int64; i,j,n:longint; begin readln(n); for i:=1 to n do read(A[i]); for i:=1 to n do read(B[i]); for i:=1 to n do begin G[i]:=F[i-1];F[i]:=F[i-1]; for j:=0 to i-1 do F[i]:=max(G[j]+A[j]*B[i],F[i]); Ans:=max(F[i],ans);end; writeln(ans); end.
总结 200分还是很基础的,但是都写挂了,只有30分。要知道200分就排到25名了。敲之前要想清楚,写完代码要认真查错。