tyvj p1211(舞蹈家怀特先生)
不知道为什么少了1,郁闷。一道动规题
1 program p1211; uses math; 2 var 3 i,j,k,l,m,n,x,y,ans:longint; 4 f:array[0..10010,0..4,0..4]of longint; 5 s:array[0..10000]of longint; 6 ch:char; 7 function zhuan(ch:char):longint; 8 begin 9 zhuan:=ord(ch)-48; 10 end; 11 function effort(a,b:longint):longint; 12 begin 13 if(a=0)or(b=0)then exit(2) 14 else 15 begin 16 case abs(a-b) of 17 0:exit(1); 18 2:exit(4); 19 1:exit(3); 20 3:exit(3); 21 end; 22 end; 23 end; 24 {---------------------------------------------------------------------} 25 begin 26 assign(input,'p1211.in'); 27 reset(input); 28 assign(output,'haha.out'); 29 rewrite(output); 30 readln(n); 31 ans:=maxlongint; 32 for i:=1 to n do 33 readln(s[i]); 34 close(input); 35 for i:=1 to n do 36 for j:=0 to 4 do 37 for l:=0 to 4 do 38 f[i,j,l]:=maxlongint div 2; 39 f[1,s[1],0]:=effort(s[1],0); 40 f[1,0,s[1]]:=effort(s[1],0); 41 for i:=1 to n do 42 begin 43 for j:=1 to 4 do 44 if s[i]<>j then 45 f[i,j,s[i]]:=min(f[i-1,j,s[i-1]]+effort(s[i-1],s[i]),f[i-1,s[i-1],s[i]]+effort(j,s[i-1])); 46 for j:=1 to 4 do 47 if s[i]<>j then 48 f[i,s[i],j]:=min(f[i-1,s[i],s[i-1]]+effort(s[i-1],j),f[i-1,s[i-1],j]+effort(s[i-1],s[i])); 49 end; 50 for j:=1 to 4 do 51 for i:=1 to 4 do 52 if f[n,i,j]<ans then ans:=f[n,i,j]; 53 write(ans+1); 54 close(output); 55 end.