【JZOJ2679】跨时代
description
钟逆时针而绕,恶物狰狞的倾巢,我谦卑安静地于城堡下的晚祷,压抑远古流窜的蛮荒暗号,而管风琴键高傲的说,那只是在徒劳。我的乐器在环绕,时代无法淘汰我霸气的皇朝。 你无法预言,因为我越险,翅越艳;没有句点,跨时代蔓延,翼朝天。 月下浮雕,魔鬼的浅笑,狼迎风嚎,蝠翔似黑潮,用孤独去调尊严的色调。我跨越过世代,如兽般的姿态,琴声唤起沉睡的血脉。不需要被崇拜,如兽般的悲哀,只为永恒的乐曲存在,醒过来。 去年万众瞩目的《跨时代》专辑发行之后,周杰伦又开始了他的世界巡回演唱会《超时代》。有人说过:如果你喜欢一个人,那你一定要去看一场他的演唱会;电视机前的1m距离和在演唱会现场哪怕100m的距离,两种感觉都是截然不同的。
所以小G作为铁杆歌迷,也计划带着小Y去看周杰伦的演唱会。 演唱会当然要圈出一个空地,然后才能布置道具。 演唱会的第一站,公司临时跟当地的消防局借了n个栏杆,打算用这n个栏杆围出一个矩形。而麻烦的是,这些栏杆有长有短,这就给围场地带来了一些难度。 所以公司聘请你来写一个程序,计算用这n个栏杆做多围出面积多大的矩形。
(注:必须要刚好围成一个矩形,即不能出现多余的边长,且不能切断栏杆,但所给栏杆不一定要全部用上)
analysis
暴力深搜
四条边是不是,四个$dfs$伺候
注意各种剪枝
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 1000000007
#define ll long long
#define sqr(x) x*x
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i)
using namespace std;
ll a[20];
bool bz[20];
ll n,tot,ans;
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline bool cmp(ll x,ll y)
{
return x>y;
}
inline void dfs4(ll x,ll y,ll z,ll zz)
{
if (y*2>tot-zz*2 || y>z || tot-zz*2-z<y)return;
if (x>n)
{
if (y<z)return;
ans=max(ans,z*zz);
return;
}
if (bz[x]==0)
{
bz[x]=1,dfs4(x+1,y+a[x],z,zz);
bz[x]=0,dfs4(x+1,y,z,zz);
}
else dfs4(x+1,y,z,zz);
}
inline void dfs3(ll x,ll y,ll z)
{
if (y*2>tot-z*2 || y>z)return;
if (x>n)
{
if (ans==0 || (ans>0 && y*z>ans))dfs4(1,0,y,z);
return;
}
if (bz[x]==0)
{
bz[x]=1,dfs3(x+1,y+a[x],z);
bz[x]=0,dfs3(x+1,y,z);
}
else dfs3(x+1,y,z);
}
inline void dfs2(ll x,ll y,ll z)
{
if (y*2>=tot || y>z)return;
if (x>n)
{
if (y<z)return;
if (ans==0 || (ans>0 && y*((tot-y*2)/2)>ans))dfs3(1,0,y);
return;
}
if (bz[x]==0)
{
bz[x]=1,dfs2(x+1,y+a[x],z);
bz[x]=0,dfs2(x+1,y,z);
}
else dfs2(x+1,y,z);
}
inline void dfs1(ll x,ll y)
{
if (y*2>=tot)return;
if (x>n)
{
if (ans==0 || (ans>0 && y*((tot-y*2)/2)>ans))dfs2(1,0,y);
return;
}
bz[x]=1,dfs1(x+1,y+a[x]);
bz[x]=0,dfs1(x+1,y);
}
int main()
{
freopen("T1.in","r",stdin);
n=read();
fo(i,1,n)tot+=a[i]=read();
sort(a+1,a+n+1,cmp),dfs1(1,0);
if (!ans)printf("No Solution\n");
else printf("%lld\n",ans);
return 0;
}
【JZOJ2679】跨时代的更多相关文章
- [JZOJ2679] 跨时代
题目 题目大意 给你一堆边,你要将它们围成面积最大的矩形. 边不一定要用完,而且围成的矩形不能凸出一块. \(n\leq 16\) \(l_i \leq 15\) 思考历程 看到这题的第一眼,就会立马 ...
- 跨时代的分布式数据库 – 阿里云DRDS详解(转)
原文章地址:https://www.csdn.net/article/a/2015-08-28/15827676 跨时代的分布式数据库 – 阿里云DRDS详解 发表于2015-08-28 18:39| ...
- 跨时代的MySQL8.0新特性解读
目录 MySQL发展历程 MySQL8.0新特性 秒级加列 性能提升 文档数据库 SQL增强 共用表表达式(CTEs) 不可见索引(Invisible Indexes) 降序索引(Descending ...
- APP技术演化的路
谈起APP,大家都太熟悉不过了,今天想谈谈这么多年技术演化的路. 早期一些大公司就开始做一些APP了,例如facebook.google等国外的公司就已经开发这个技术路线,那个时候的APP数量很少,基 ...
- 解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介
ASP.NET 5简介 ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一 ...
- ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘
开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...
- [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向
[.net 面向对象程序设计深入](4)MVC 6 ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0 ...
- 【转】解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介
ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一个.NET Core的东 ...
- 手把手写一个html_json信息源
html_json用于从网页里提取json数据. 这里用新浪读书的书讯举个例子,手把手写一个html_json信息源. 打开新浪读书的首页,可以看到页面下方有最新.书讯.童书.小说等几个Tab,这里我 ...
随机推荐
- Python实现字符串与数组相互转换功能示例
Python实现字符串与数组相互转换功能示例 本文实例讲述了Python实现字符串与数组相互转换功能.分享给大家供大家参考,具体如下: 字符串转数组 str = '1,2,3' arr = s ...
- 20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl+k+
1.模板类pair的用法 包含头文件#include<utility> http://blog.csdn.net/laixingjun/article/details/9005200 ...
- 了解JNI技术
在线文库系统用到了Jacob,它是基于JNI技术实现的,通过调用MS Office的Com接口实现,我这里对JNI技术进行一个学习. 基本上JNI技术相当于一个代理,因为java的跨平台特性,所以它自 ...
- drools语法介绍
这里没有翻译http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html上的内容 而是参考了网 ...
- scala入门基础学习
1.Scala基础语法 区分大小写 类名 - 对于所有的类名的第一个字母要大写.如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写. 方法名称 - 所有的方法名称的第一个字母用小写. ...
- Leetcode241.Different Ways to Add Parentheses为运算表达式设计优先级
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 +, - 以及 * . 示例 1: 输入: "2-1 ...
- The linux command之环境
一.环境 shell在环境中存储了两种数据类型:环境变量(environment variables )shell变量(shell variables).在shell中这两种变量基本没有什么不同. 此 ...
- yii2 vendor/bower/jquery/dist not exist
查看 vendor 文件夹,只有bower-asset文件夹 手动修改 bower-asset 为bower 倒也可以,yii2项目每次 composer install 成功之后,每次重命名这个文件 ...
- CF 540D Bad Luck Island
一看就是DP题(很水的一道紫题) 设\(dp[i][j][k]\)为留下\(i\)个\(r\)族的人,死去\(j\)个\(s\)族的人,死去\(k\)个\(p\)族的人的概率(跟其他的题解有点差别,但 ...
- RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)
摘要: 事务消息提交或回滚的实现原理就是根据commitlogOffset找到消息,如果是提交动作,就恢复原消息的主题与队列,再次存入commitlog文件进而转到消息消费队列,供消费者消费,然后将原 ...