码迷,mamicode.com
首页 > 编程语言 > 详细

USACO 1.1.4 beads O(n)的两种算法

时间:2016-04-17 20:37:03      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

Algorithms one:类似动归的递推。。(还是类似递推的动归^(* ̄(oo) ̄)^算了这不重要)

 1 type
 2   node=record
 3   bl,br,rl,rr,sum:longint;
 4   data:char;
 5 end;
 6 var
 7   len,i,j,t,mmax:longint;
 8   a:array[0..705]of node;
 9 function max(x,y:longint):longint;
10 begin
11   if x>y then exit(x)
12   else exit(y);
13 end;
14 begin
15   readln(len);
16   for i:=1 to len do
17     read(a[i].data);
18   for i:=1 to len do
19     a[i+len].data:=a[i].data;
20 
21   for i:=1 to len*2 do
22   case a[i].data of
23     w:begin a[i].bl:=a[i-1].bl+1;a[i].rl:=a[i-1].rl+1;end;
24     r:a[i].rl:=a[i-1].rl+1;
25     b:a[i].bl:=a[i-1].bl+1;
26   end;
27 
28   for i:=len*2 downto 1 do
29   case a[i].data of
30     w:begin a[i].br:=a[i+1].br+1;a[i].rr:=a[i+1].rr+1;end;
31     r:a[i].rr:=a[i+1].rr+1;
32     b:a[i].br:=a[i+1].br+1;
33   end;
34 
35   for i:=1 to len*2 do
36   begin
37     a[i].sum:=max(a[i-1].bl,a[i-1].rl)+max(a[i].br,a[i].rr);
38     if a[i].sum>len then a[i].sum:=len;
39     if a[i].sum>mmax then
40       mmax:=a[i].sum;
41   end;
42   writeln(mmax);
43 end.//具体什么的见nocow http://www.nocow.cn/index.php/USACO/beads思路一前面

Algorithms two:不贴代码了,上路径~http://www.nocow.cn/index.php/USACO/beads思路一后面

核心思想:{事实上不必使用动态规划,直接搜索亦可达到O(n)。
把两个同样的项链放在一块,从头开始用两个变量(变量)a,b记录自左方某点至目前为止可搜集到之两种颜色珠子数,
取途中所出现a+b之最大值,遇颜色变换时再将b指定给a即可,代码十分简洁。}

 

好想吐槽写博好耗时间。。。不过据说写博写久了能写成OI大神,还是掏出看《刀剑》的时间写博比较好^(* ̄(oo) ̄)^

USACO 1.1.4 beads O(n)的两种算法

标签:

原文地址:http://www.cnblogs.com/MyNameIsPc/p/5401937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!