Description

  给出3*n个数xi,要求构造三个长度为n的序列ai,bi,ci,使得满足下列条件:

    1到3*n的每个数都在三个序列中的某个出现一次且仅一次;

    S=sum((x[ai]-x[bi])*x[ci])最大。

  输出最大的S。多组数据。

Input Format

  第一行包含两个数T和n,T是数据组数,n如题目描述。

  接下来T行,每行包含3*n个数,表示xi。

Output Format

  输出包含T行,每行输出最大的S。

Sample Input

1 2
4 1 8 2 0 5

Sample Output

46

Hint

  对于1<=n<=10,有不超过1000组数据;

  对于11<=n<=15,又不超过100组数据;

  对于16<=n<=20,有不超过10组数据;

  对于21<=n<=25,仅有1组数据。

  所有xi<=1000。

Solution

  首先先Orz yff,怎么想到dfs的。。。标解是状压DP,还是卡时过的,不知比暴力慢到哪里去了。

  1. 当a>=c>=b时(a-b)*c的值最大。推一推就出来了。

  2. 将读入的3*n个数从小到大排序,x1~xn一定分别在每组中,且一定是每组的b

  3. 将n个三元组(ai,bi,ci)按照ci从小到大排序。为了使Σ( a[i] - b[i] ) * c[i]最大化,根据排序不等式可以得a1<=a2<=a3<=…<=an,b1>=b2>=…>=bn。所以b1=xn,b2=xn-1…bn=x1。

  4. 最优性剪枝:两个三元组(ai,bi,ci)与(aj,bj,cj)为最终答案,当且仅当

    (ai - bi) * ci + (aj - bj) * cj > (ai - bi) * aj + (ci - bj) * cj

    即(ci - aj) (ai - bi - cj) > 0

  然后就dfs吧= =

 #include<cstdio>
#include<cstring>
#include<algorithm>
int T,n,a[],c[],t[],ans,now;bool vis[];
bool check(int x)
{
for(int i=;i<x;i++)
{
if(c[i]>a[x]&&a[i]-t[*n-i+]<c[x])return ;
if(c[i]<a[x]&&a[i]-t[*n-i+]>c[x])return ;
}
return ;
}
void dfs(int xa,int tc)
{
if(xa==n+)
{
if(ans<now)ans=now;
return;
}
for(int i=xa;i<=*n;i++)
if(!vis[i])
{
vis[i]=,a[xa]=t[i];
for(int j=std::max(i,tc)+;j<=*n;j++)
if(!vis[j])
{
vis[j]=,c[xa]=t[j],
now+=(a[xa]-t[*n-xa+])*c[xa];
if(now*n>ans*xa&&check(xa))dfs(xa+,j);
now-=(a[xa]-t[*n-xa+])*c[xa],vis[j]=;
}
vis[i]=;break;
}
}
bool cmp(int i,int j){return i>j;}
int main()
{
for(scanf("%d%d",&T,&n);T;T--)
{
for(int i=;i<=*n;i++)scanf("%d",&t[i]);
std::sort(t+,t++*n,cmp);ans=;
dfs(,);printf("%d\n",ans);
}
}

[YZOJ1579]&&[BZOJ2450]arr的更多相关文章

  1. android studio 使用jar包,arr包和怎么使用githup开源项目中的aar包或module

    我这里的android studio的版本是2.2.3版本 一.现在大家都用android studio了,就有人问怎么使用jar包 其实使用jar包比较简单 直接吧jar放入工程的app目录下的li ...

  2. 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

    平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...

  3. 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

    分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...

  4. nginx+iis、NLB、Web Farm、Web Garden、ARR

    nginx+iis实现负载均衡 在win2008R2上使用(NLB)网络负载均衡 NLB网路负载均衡管理器详解 [译文]Web Farm和Web Garden的区别? IIS负载均衡-Applicat ...

  5. 数组求和,计算给定数组 arr 中所有元素的总和

    一,题目分析:可以使用数组的归并方法计算,reduce和reduceRight.二者作用几乎相同.只是归并方向相反.reduce和reduceRight都可以接收两个参数.第一个是在每一项上调用的函数 ...

  6. js数组键入值push和 arr[]i]区别

    push 和 arr[i] 遍历 var arr = new Array(); $(":check").each(function(i){if(this.checked==true ...

  7. 利用IIS应用请求转发ARR实现IIS和tomcat整合共用80端口

    现在网上流传的实现iis和tomcat共享80端口的方法是基于isapi_redirect插件实现的, 我的实现方法不同, 原理相似,具有更好的优点. 先说下基于isapi_redirect缺点,ja ...

  8. IIS负载均衡ARR路由请求到ARR服务器和处理服务器

    .net web 使用IIS ARR(Application Request Route)技术实现web的高性能.高可靠.易扩展及负载均衡.ARR的使用请参考 IIS负载均衡-Application ...

  9. C/C++ char* arr与char arr[]的区别(反汇编解析)

    写作日期:2016.08.31 修改日期:2016.09.01 .2016.09.02. 交流qq:992591601 用了几天时间复习了下C语言.对于C语言的字符串操作有些不习惯,于是作为练习,写下 ...

随机推荐

  1. 【转】浅析Windows编程的剪贴板

    摘要: 本文对Windows剪贴板机制作了深入.全面的阐述,具体内容包括:文本.位图.DSP.自定义格式剪贴板的使用和多数据项和延迟提交技术. 关键词: VC++6.0: 剪贴板机制:数据格式:延迟提 ...

  2. 执行mysql脚本

    方法1: mysql -uroot -p123456 -Ddatabasename < sql文件路径 方法2: source 路径全名 \. 路径全名

  3. 设置contentType

    //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...

  4. Codevs 4560 NOIP2015 D2T2 子串

    > 4560 NOIP2015 D2T2 子串 时间限制: 1 s 空间限制: 128000 KB 题目等级:黄金 Gold 题目描述 Description 有两个仅包含小写英文字母的字符串A ...

  5. C/C++中memset函数

    本文学习参考http://baike.baidu.com/link?url=ZmSyY8ciB_nJt9KM-W2fiEFJrC2mugFsLqRdY2b4pLe8rD_jRXyN7_pj0GBBD2 ...

  6. php安装过程中遇到的需要安装的问题

    http://www.cnblogs.com/kristain/articles/3809243.html     借鉴php安装错误 2013-01-04 19:16:49 分类: 系统运维 环境: ...

  7. ceph入门学习链接

    https://tobegit3hub1.gitbooks.io/ceph_from_scratch/content/introduction/component.html

  8. uploadify 上传文件出现HTTP 404错误

    今天在使用jquery.uploadify.js上传文件的时候,出现HTTP 404错误,此错误在上传较小文件时不会出现,在上传一个50M左右文件时出现此错误,经过测试和日志查看发现,根本没有进入后台 ...

  9. ∑–△型模数转换器(ADC)简介

    ∑–△型模数转换器(ADC) 1.概述 近年来,随着超大规模集成电路制造水平的提高,Σ-Δ型模数转换器正以其分辨率高.线性度好.成本低等特点得到越来越广泛的应用.Σ-Δ型模数转换器方案早在20世纪60 ...

  10. 数据库之--- SQLite 语句

    一. 基础创表操作: 1. 创建表 CREATE TABLE IF NOT EXISTS t_dog(name text, age bolb, weight real); 2. 插入记录 INSERT ...