poj1179polygon
2015-07-20 00:03
561 查看
只要注意负负得正,所以要保存最大和最小值
但我一开始区间起始位置枚举没有写到2*n-1,使得后面的小区间没有办法枚举到,然后WA了
痛定思痛!
但我一开始区间起始位置枚举没有写到2*n-1,使得后面的小区间没有办法枚举到,然后WA了
痛定思痛!
program polygon; var n,l,i,j,k,t:longint; maxx:int64; ch:char; f,g:array[0..150,0..150]of longint; b:array[0..150]of char; a:array[0..150]of longint; function max(a,b:longint):longint; begin if a<b then max:=b else max:=a; end; function min(a,b:longint):longint; begin if a<b then min:=a else min:=b; end; begin readln(n); for i:=1 to 2*n do for j:=1 to 2*n do begin f[i,j]:=-maxlongint; g[i,j]:=maxlongint; end; for i:=1 to 2*n do if odd(i) then begin read(ch); b[(i+1) div 2]:=ch; b[n+(i+1) div 2]:=ch; read(ch); end else begin read(a[i div 2]); a[n+i div 2]:=a[i div 2]; f[i div 2,i div 2]:=a[i div 2]; f[n+i div 2,n+i div 2]:=a[i div 2]; g[i div 2,i div 2]:=a[i div 2]; g[n+i div 2,n+i div 2]:=a[i div 2]; read(ch); end; maxx:=-maxlongint; for l:=2 to n do for i:=1 to 2*n-1 do begin j:=i+l-1; if j<=2*n then for k:=i to j-1 do if b[k+1]='t' then begin f[i,j]:=max(f[i,j],f[i,k]+f[k+1,j]); g[i,j]:=min(g[i,j],g[i,k]+g[k+1,j]); end else begin f[i,j]:=max(f[i,j],max(f[i,k]*f[k+1,j],g[i,k]*g[k+1,j])); g[i,j]:=min(g[i,j],min(g[i,k]*f[k+1,j],f[i,k]*g[k+1,j])); end; if maxx<f[i,i+n-1] then maxx:=f[i,i+n-1]; end; writeln(maxx); for i:=1 to n do if f[i,i+n-1]=maxx then write(i,' '); end.
相关文章推荐
- 在Django中创建URLconf相关的通用视图的方法
- Django框架中处理URLconf中特定的URL的方法
- Django中URL视图函数的一些高级概念介绍
- Django中URLconf和include()的协同工作方法
- 详解Django框架中用context来解析模板的方法
- 在Django框架中编写Context处理器的方法
- 在Django中编写模版节点及注册标签的方法
- 在Django的上下文中设置变量的方法
- 今天装gocoed 出现了%path没有设置,不能进行
- HDU3363 Ice-sugar Gourd
- django 简单会议室预约(5)
- algorithm之排序算法--待解决
- GO语言练习:channel 工程实例
- POJ 1389 Area of Simple Polygons(面积合并,线段树+离散化)
- ZOJ 3233
- golang之flag.String
- Django应用部署 - 上线指南
- Django应用部署 - 上线指南
- golang标准库的学习
- hdu 1010 Tempter of the Bone(DFS)