运用部分枚举的思想,很明显完全枚举点的思想是不可能的。改为枚举上下边界,当确定右边界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. Django day32 跨域问题,创建vue项目,axios的使用

    一:跨域问题 1.同源策略(浏览器的安全策略) 只允许当前页面朝当前域下发请求,如果向其他域发请求,请求可以正常发送,数据也可以拿回,但是被浏览器拦截了 2.cors:只要服务器实现了CORS,就可以 ...

  2. canvas 文字转化为粒子

    var canvas = document.createElement('canvas'); var cxt = canvas.getContext('2d'); var W = canvas.wid ...

  3. Perforce 的基本使用教程

    一.简介 P4是什么 二.基本使用方法 1.下载代码 下载最新代码 Get Latest Revision 下载指定commit代码 Get Revision 2. 检出代码 选择指定目录,右键 Ch ...

  4. Win32子窗口的创建

    本文主要是在一个主窗口下创建一个子窗口.主窗口有一个菜单,菜单下只有设置一个选项,点击设置选项,弹出设置界面,点击设置界面关闭则关闭.我在开发的时候遇到两个问题,第一就是一点设置关闭就整个应用都关了, ...

  5. python自动化测试框架(一)

    1.开发环境 名称 版本 系统 windows 7 python版本 2.7.14 IDE pycharm2017 2.大致框架流程 :展示了框架实现的业务流程 3.框架介绍 3.1 ======完善 ...

  6. 关于类似vue-cli 脚手架

    #!/usr/bin/env node const download = require('download-git-repo') const program = require('commander ...

  7. Ruby开发环境的搭建

    1.Ruby的下载 https://rubyinstaller.org/downloads/ 2.Ruby的安装 3.Eclipse配置Ruby开发环境 插件地址:http://rubyeclipse ...

  8. CNN结构:色彩空间建模-色彩空间分析

    原文: 色彩空间基础 好一个NB的知乎专栏:色彩空间基础 第一章:色彩空间基础 关于色彩分析,引出了专门的数学基础.整个过程给出了完备的数学阐述,虽然没有试验数据,论述的相当精彩. 摘抄出一段:  上 ...

  9. 05--QT常用的类

    http://blog.csdn.net/HMSIWTV/article/category/1128561/2 Qt常用类(1)—— 开端       使用Qt进行编程必须对 Qt 中常用的类有一定的 ...

  10. 查看APK包名签名等信息

    有些游戏第三方比如分享需要配置游戏包名和签名,不同渠道包名签名又不同,所以时常需要查看不同apk包等签名信息,之前是使用等微博开放平台的手机客户端查看apk签名,前提是知道包名,网上找了下查看签名和包 ...