【问题描述】
假设这是一个二次元。
LYK召集了n个小伙伴一起来拍照。他们分别有自己的身高Hi和宽度Wi。
为了放下这个照片并且每个小伙伴都完整的露出来,必须需要一个宽度为ΣWi,长度为max{Hi}的相框。(因为不能叠罗汉)。
LYK为了节省相框的空间,它有了绝妙的idea,让部分人躺着!一个人躺着相当于是身高变成了Wi,宽度变成了Hi。但是很多人躺着不好看,于是LYK规定最多只有n/2个人躺着。(也就是说当n=3时最多只有1个人躺着,当n=4时最多只有2个人躺着)
LYK现在想问你,当其中部分人躺着后,相框的面积最少是多少。
【输入格式】
第一行一个数n。
接下来n行,每行两个数分别是Wi,Hi。
【输出格式】
你需要输出这个相框的面积最少是多少。
【样例输入】
3
3 1
2 2
4 3
【样例输出】
27
【样例解释】
如果没人躺过来,需要27的面积。
我们只要让第1个人躺过来,就只需要21的面积!
【数据规模与约定】
对于30%的数据n<=10。
对于60%的数据n<=1000,Wi,Hi<=10。
对于100%的数据1<=n,Wi,Hi<=1000。

题解:
     ①先去掉一个限制,方法是枚举最大高度H,贪心分类讨论:

          ·贪心策略:在高度不超过限制的情况下,使宽度增加尽可能少。

          设h,w分别为当前人的高和宽,那么:

          (1)h>H:

                w>H:躺着还是会超出高度,不合法直接跳出。
                w<=H:躺着

          (2)h<=H:

                 h>=w:站着(这样宽度增加得少)

                h<w:躺着,但是由于躺的人数有限制,所以有一部分还是要站着。

               因此特殊处理这种需要决策的情况(在h<=H&&h<w的这种情况下):

                    问题:这些人站着躺着的高度都不会超出H,因此考虑怎样选择使得总宽度最少。

                    解决方案:先让每个人都站着,此时总宽度设为W,然后再让n/2个人躺下:

                         每个人躺下,那么这个人对W将加上值(h-w) (意思是将宽换成高的长),

                         那么我们希望(h-w)尽量小,因此从小到大排序然后取前n/2个躺着就可以了。

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <map>
using namespace std;
set<int> ::iterator sit;
int ans,sum,p[1005],i,a[1005],b[1005],cnt,CNT,j,ANS,n;
int cmp(int i,int j) {return i>j;}
bool FLAG;
int main()
{
ANS=1000000000;
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d%d",&a[i],&b[i]);
for (i=1; i<=1000; i++)
{
sum=0; FLAG=true; cnt=0; CNT=0;
for (j=1; j<=n; j++)
if (b[j]<=i && (a[j]<=b[j] || a[j]>i)) sum+=a[j]; else
if (a[j]>i && b[j]>i) {FLAG=false; break;} else
if (b[j]>i) {cnt++; sum+=b[j];} else
{
p[++CNT]=a[j]-b[j];
sum+=a[j];
}
if (!FLAG) continue;
if (cnt>n/2) continue;
sort(p+1,p+CNT+1,cmp);
for (j=1; j<=min(n/2-cnt,CNT); j++) sum-=p[j];
ANS=min(ANS,sum*i);
}
cout<<ANS;
return 0;
}//Ztraveler

每当我在路上停下脚步,望着天空我都会看到你。

每当我从荒芜的梦中惊醒,留着眼泪我都能感觉到你。————汪峰《母亲》

【ZBH选讲·拍照】的更多相关文章

  1. 【ZBH选讲·树变环】

    [问题描述] 你是能看到第三题的friends呢.——aoao 树是个好东西,删掉树一条边要1的代价,随便再加一条边有1的代价,求最小的代价把树变成环.[输入格式] 第一行一个整数,代表树的点数.接下 ...

  2. 【ZBH选讲·模数和】

    [问题描述]你是能看到第二题的friends呢.——laekovHja和Yjq在玩游戏,这个游戏中Hja给了Yjq两个数,希望Yjq找到一些非负整数使得这些数的和等于n,并且所有数模maaaaaaaa ...

  3. PJ可能会用到的动态规划选讲-学习笔记

    PJ可能会用到的动态规划选讲-学习笔记 by Pleiades_Antares 难度和速度全部都是按照普及组来定的咯 数位状压啥就先不讲了 这里主要提到的都是比较简单的DP 一道思维数学巧题(补昨天) ...

  4. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  5. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  6. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  7. [转载]CSP-J/S 第一轮知识点选讲

    CSP-J/S 第一轮知识点选讲 转载自这里 感谢原博主的大力整理! 信息学史及基本知识 一.信息学及计算机史 计算机的顶级奖项:图灵奖.冯·诺依曼奖 图灵奖:由ACM(美国计算机协会)设立于1966 ...

  8. DP选讲

    $DP$选讲直接上题吧放个题单[各省省选DP](https://www.luogu.com.cn/training/151079)$P5322[BJOI2019]$排兵布阵一眼题,考虑$dp[i][j ...

  9. ZROI 暑期高端峰会 A班 Day5 杂题选讲

    CF469E \(n\) 个需要表示的数,请使用最少的 \(2^k\) 或 \(-2^k\) 表示出所有需要表示的数.输出方案. \(n\le 10^5,|a_i|\le 10^5\). 首先每个数肯 ...

随机推荐

  1. Tomcat+jdk 环境处理 java jsp代码编写web环境的容器

    Tomcat是由 Apache 软件基金会下属的 Jakarta 项目开发的一个Servlet 容器,按照 SunMicrosystems 提供的技术规范,实现了对 Servlet 和 JavaSer ...

  2. composer环境安装

    PHP很多优秀的框架,例如Laravel等等,镜像都在国外,相关的包管理工具Composer也是在国外,所以安装失败的可能性很大,题主所示的就是因为连不上Composer.解决方法如下: 进入官网, ...

  3. html5中的progress兼容ie,制作进度条样式

    html5新增的progress标签用处很大,它可以制作进度条,不用像以前那样用css来制作进度条! 一.progress使用方法 progress标签很好使用,他有两个属性,value和max,va ...

  4. 15.8,redis-cluster配置

      为什么要用redis-cluster 1.并发问题 redis官方生成可以达到 10万/每秒,每秒执行10万条命令假如业务需要每秒100万的命令执行呢? 2.数据量太大 一台服务器内存正常是16~ ...

  5. Javascript Step by Step - 02

    DOM 操作 DOM是面向HTML和XML文档的API,为文档提供了结构化表示.在DOM中一切都是节点Node,文档就是由许多的Node组成的.文档里的每个节点都有属性 nodeName.nodeVa ...

  6. Invalid bound statement (not found): com.up.sell.mapper.system.H5operationMapper.

    springboot + mybatis项目,出现这样的错误原因就是mapper类的名字和xml的id不对应或者是忘记写了,仔细检查一下吧

  7. Linux查看程序端口占用

    使用命令: 1.ps -aux | grep 80 2.使用命令:netstat –apn 查看所有的进程和端口使用情况.

  8. 底部菜单栏之Fragment的详细介绍和使用方法

    详情请看:http://blog.csdn.net/loongggdroid/article/details/9366413

  9. b树的实现

    花了蛮长时间实现的b树插入操作.有时间再实现其他操作. #include <stdio.h> #include <stdlib.h> #define M 5 enum KeyS ...

  10. Pascal小游戏 文件的产生

    一个整人的Pascal小程序 运行之后硬盘里面会有一大堆垃圾,当然更好的方法当然不是这样做! var a,b,c,d:char;beginfor a:='0' to '9' dofor b:='0' ...