poj1948
很容易想到dp,f[i,j,k]表示到第i根木棒所组成三条边中两条边长为j,k是否存在
之后找所有满足三角形形成条件的三条边,然后找最大;
但:
如果你朴素的写,很有可能超时,事实上,只要加一些常数优化,就能卡过去
var a,s:array[..] of longint;
f:array[..,..,..] of boolean;
i,j,k,k1,k2,n,l:longint;
ans,p,t:double;
begin
readln(n);
for i:= to n do
begin
readln(a[i]);
s[i]:=s[i-]+a[i];
end;
f[,,]:=true;
k1:=;
k2:=;
for i:= to n do
begin
k1:=k1 xor ;
k2:=k2 xor ;
for j:= to s[i] do
begin
l:=min(j,s[i]-j);
for k:= to l do //常数优化1
begin
if j-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j-a[i],k];
if k-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j,k-a[i]];
if s[i]-j-k-a[i]>= then f[k2,j,k]:=f[k2,j,k] or f[k1,j,k];
end;
end;
end;
ans:=;
for i:= to s[n]- do
for j:=(s[n] shr )+-j to min(s[n]-j-,j) do //常数优化2:满足三角形
if f[k2,i,j] and (s[n]-i-j>) then
begin
k:=s[n]-i-j;
if (j>=i+k) or (k>=i+j) or (i>=j+k) then continue;
t:=(k+i+j)/;
p:=sqrt(t*(t-i)*(t-j)*(t-k));
ans:=max(ans,p);
end;
if ans= then writeln(-) else writeln(trunc(ans*));
end.
事实上在OI中,多加一些常数优化往往有意想不到的效果!
poj1948的更多相关文章
- POJ1948 Triangular Pastures
POJ1948 Triangular Pastures #include <iostream> #include <cmath> using namespace std; ; ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
- poj 01背包
首先我是按这篇文章来确定题目的. poj3624 Charm Bracelet 模板题 没有要求填满,所以初始化为0就行 #include<cstdio> #include<algo ...
- POJ之01背包系列
poj3624 Charm Bracelet 模板题 没有要求填满,所以初始化为0就行 #include<cstdio> #include<iostream> using na ...
随机推荐
- 没有文件扩展".js"的脚本引擎 解决办法
在命令行运行JScript脚本时,遇到如下的错误提示: “输入错误: 没有文件扩展“.js”的脚本引擎.” 这样的错误,原因是因为JS扩展名的文件被其他软件关联了,需要取消关联. 如系统中安装了ULT ...
- 添加打印机的时候怎样说windows没法连接到打印机毛病为0x00000002
把PrinterExtensionsandNotifications这个服务启动1下试试 PrintSpooler服务停止然后再启用试试
- window2003安全设置
1. 网上邻居->右键 属性->本地连接 右键属性->Microsoft网络的文件和打印机共享去掉选中 (影响端口: 139,445) 2. 禁止ADMIN$缺省共享 ...
- AWK 介绍
一.模式和动作 awk脚本是由模式和操作组成的:pattern {action} pattern与{action}两者是可选的.如果没有模式,则action应用到全部记录,如果没有action,则输出 ...
- Header:请求头参数详解
Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html,application/json Accept-Charset 浏览器 ...
- There is a legend about a bird
There is a legend about a bird which sings just once in its life, more sweetly than any other ...
- EasyUI Layout Full - Not Correct in IE8
EasyUI Full布局在IE10,IE9下正常,IE8无效果,标记一下有知道的可以留个言! 如图 IE 10 IE 8
- having与where区别
having后可以跟组函数如avg(sal)而where后不可以有, 如果条件不是必须使用组函数最好还是使用where
- linux常用命令及安装软件命令
1.查看操作系统是33位还是64最简单的方法 getconf LONG_BIT 或者 uname -a 2.常用命令 2.1基本操作 clear 清屏 2.2安装命令 rpm(redhat packa ...
- python学习笔记14(多态、封装、继承)
创建自已的对象(尤其是类型或者被称为类的对象)是python非常核心的概念. 多态: 可对不同类的对象使用同样的操作. 封装:对外部世界隐藏对象的工作细节. 继承:以普通的类为基础建立专门的类对象. ...