运用部分枚举的思想,很明显完全枚举点的思想是不可能的。改为枚举上下边界,当确定右边界j后,对左边界i,可以有点数为on[j]+on[i]+(leftu[j]-leftu[i])+leftd[j]-leftd[i]。然后取最大值,on[j]+on[i]+(leftu[j]-leftu[i])+leftd[j]-leftd[i]=(on[j]+leftu[j]+leftd[j])+on[i]-leftu[i]-leftd[i]。维护on[i]-leftu[i]-leftd[i]的最大值。leftu为上边界左该点左边的点数,leftd是下边界的。

注意竖线与横线交点处是否有点。所以维护最大值时应改为on[i]-leftu[i-1]-leftd[i-1];

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; struct Point{
int x,y;
}P[105];
int y[105],leftu[105],leftd[105],onu[105],ond[105],on[105]; bool cmp(Point a,Point b){
if(a.x<b.x) return true;
return false;
} int gao(int n){
sort(P,P+n,cmp);
sort(y,y+n);
int m=unique(y,y+n)-y;
if(m<=2) return n;
int colk=0;
int res=0;
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
colk=0;
for(int k=0;k<105;k++){
leftu[k]=leftd[k]=on[k]=onu[k]=ond[k]=0;
}
for(int k=0;k<n;k++){
if(colk==0||P[k].x!=P[k-1].x){
on[colk]=onu[colk]-ond[colk]; colk++;
leftu[colk]+=leftu[colk-1];
leftd[colk]+=leftd[colk-1];
}
if(P[k].y==y[j]) leftu[colk]++;
else if(P[k].y==y[i]) leftd[colk]++;
if(P[k].y<=y[i]) ond[colk]++;
if(P[k].y<y[j]) onu[colk]++;
}
on[colk]=onu[colk]-ond[colk]; if(colk<=2) return n;
int tmpmax=on[1]-leftu[0]-leftd[0];
for(int k=2;k<=colk;k++){
res=max(res,on[k]+leftu[k]+leftd[k]+tmpmax);
tmpmax=max(tmpmax,on[k]-leftu[k-1]-leftd[k-1]);
}
} }
return res;
} int main(){
int kase=0,n;
while(scanf("%d",&n),n){
for(int i=0;i<n;i++){
scanf("%d%d",&P[i].x,&P[i].y);
y[i]=P[i].y;
}
int ans=gao(n);
printf("Case %d: %d\n",++kase,ans);
}
return 0;
}

  

LA 3695 部分枚举的更多相关文章

  1. LA 3695 Distant Galaxy

    给出n个点的坐标(坐标均为正数),求最多有多少点能同在一个矩形的边界上. 题解里是构造了这样的几个数组,图中表示的很明白了. 首先枚举两条水平线,然后left[i]表示竖线i左边位于水平线上的点,on ...

  2. UVa LA 3695 - Distant Galaxy 前缀和,状态拆分,动态规划 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  3. LA 7049 Galaxy 枚举

    题意: \(x\)轴上有\(n\)个质量为\(1\)的点,他们的坐标分别为\(x_i\). 质心的坐标为\(\frac{\sum{x_i}} {n}\) 转动惯量为\(\sum{d_i^2}\),其中 ...

  4. LA 2402 (枚举) Fishnet

    题意: 正方形四个边界上分别有n个点,将其划分为(n+1)2个四边形,求四边形面积的最大值. 分析: 因为n的规模很小,所以可以二重循环枚举求最大值. 求直线(a, 0) (b, 0) 和直线(0, ...

  5. LA 4253 箭术(二分枚举)

    https://vjudge.net/problem/UVALive-4253 题意: 有n个平行于x轴的线段,每条线段代表一个靶子.判断是否可以站在x轴上[0,W]区间内的某个位置射箭. 思路:二分 ...

  6. LA 4794 状态DP+子集枚举

    状态压缩DP,把切割出的面积做状态压缩,统计出某状态下面积和. 设f(x,y,S)为在状态为S下在矩形x,y是否存在可能划分出S包含的面积.若S0是S的子集,对矩形x,y横切中竖切,对竖切若f(x,k ...

  7. LA 3887 - Slim Span 枚举+MST

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. LA 3602 - DNA Consensus String 枚举

    原题地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  9. LA 3602 DNA Consensus String (暴力枚举)

    题意:给定m个长度为n的DNA序列,求一个最短的DNA序列,使得总Hamming距离最小. Hamming距离等于字符不同的位置个数. 析:看到这个题,我的第一感觉是算时间复杂度,好小,没事,完全可以 ...

随机推荐

  1. POI上传Excel的小问题处理

    package com.platform.utils.excel; import com.platform.utils.RRException; import org.springframework. ...

  2. sql数据库中常用连接

    很简单的知识点,今天有点搞不清楚左外连接,右外连接:详见以下: --表stu id name 1, Jack 2, Tom 3, Kity 4, nono --表exam id grade 1, 56 ...

  3. 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)

    题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...

  4. Highcharts Highstock 学习笔记 第一篇 Highcharts配置

    Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达 ...

  5. Objective-C——关联对象

    动态语言 OC是一种动态语言,它的方法,对象的类型都是到运行的时候才能够确定的.所以这就使得OC存在了关联对象这一强大的机制. 关联对象 所谓关联对象,其实就是我们在运行时对一个已存在的对象上面绑定一 ...

  6. ie9以下的浏览器兼容性问题

    .bind不兼容的问题Function.prototype.bind = function () { var fn = this, args = Array.prototype.slice.call( ...

  7. React Native组件间通信

    React Native组件间通信 React Native组件的关系有:父子关系.无直接关系.组件间通信主要针对这两类来讨论. 一.父组件和子组件之间通信 父组件向子组件传递消息.数据通过对子组件的 ...

  8. Android Eclipse 安装教程 2016.06.13版

    2016.8.16修改 第一步,也是最为关键的一步——修改hosts文件 为什么说是最关键的一步呢?因为接下来的操作,我们都需要连接google网,也就是要连接国外的网站.一般情况下,国外的网站是无法 ...

  9. html——细线表格

    细线: 1.table表格设置背景色 2.table中设置单元格距离 3.tr标签设置另外一种背景色 <!DOCTYPE html> <html> <head lang= ...

  10. 注释及Scriptlet

    1.显式注释 <!--xxxxxx-->,在正常页面上也看不出来,右键鼠标查看源代码可以看到 2.隐式注释 //xxxxx /*xxxxxx*/ <%--xxxxxxx--> ...