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.        
posted @ 2012-11-27 20:27  改名字干什么  阅读(201)  评论(0编辑  收藏  举报