LA 3695 部分枚举
运用部分枚举的思想,很明显完全枚举点的思想是不可能的。改为枚举上下边界,当确定右边界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 部分枚举的更多相关文章
- LA 3695 Distant Galaxy
给出n个点的坐标(坐标均为正数),求最多有多少点能同在一个矩形的边界上. 题解里是构造了这样的几个数组,图中表示的很明白了. 首先枚举两条水平线,然后left[i]表示竖线i左边位于水平线上的点,on ...
- UVa LA 3695 - Distant Galaxy 前缀和,状态拆分,动态规划 难度: 2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- LA 7049 Galaxy 枚举
题意: \(x\)轴上有\(n\)个质量为\(1\)的点,他们的坐标分别为\(x_i\). 质心的坐标为\(\frac{\sum{x_i}} {n}\) 转动惯量为\(\sum{d_i^2}\),其中 ...
- LA 2402 (枚举) Fishnet
题意: 正方形四个边界上分别有n个点,将其划分为(n+1)2个四边形,求四边形面积的最大值. 分析: 因为n的规模很小,所以可以二重循环枚举求最大值. 求直线(a, 0) (b, 0) 和直线(0, ...
- LA 4253 箭术(二分枚举)
https://vjudge.net/problem/UVALive-4253 题意: 有n个平行于x轴的线段,每条线段代表一个靶子.判断是否可以站在x轴上[0,W]区间内的某个位置射箭. 思路:二分 ...
- LA 4794 状态DP+子集枚举
状态压缩DP,把切割出的面积做状态压缩,统计出某状态下面积和. 设f(x,y,S)为在状态为S下在矩形x,y是否存在可能划分出S包含的面积.若S0是S的子集,对矩形x,y横切中竖切,对竖切若f(x,k ...
- LA 3887 - Slim Span 枚举+MST
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- LA 3602 - DNA Consensus String 枚举
原题地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- LA 3602 DNA Consensus String (暴力枚举)
题意:给定m个长度为n的DNA序列,求一个最短的DNA序列,使得总Hamming距离最小. Hamming距离等于字符不同的位置个数. 析:看到这个题,我的第一感觉是算时间复杂度,好小,没事,完全可以 ...
随机推荐
- Expected one result (or null) to be returned by selectOne(), but found: 2 和 java.lang.UnsupportedOperationException异常
在学习MyBatis的时候,简简单单的MyBatis+MySql的增删改查操作,但是却出了问题. 刚开始数据库只有一条数据的时候,岁月静好,一切看起来都那么的OJBK.但是,当我往数据库插入第二条数据 ...
- vue+nodejs+express解决跨域问题
nodejs+express解决跨域问题,发现网上的大部分都是误导人,花了不少时间,终于弄懂了, 我在vue+nodejs+express+mongodb的项目里面,发现本地用vue代理正常调用远程的 ...
- JavaScript--输出内容(document.write)
document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容. 第一种:输出内容用“”括起,直接输出""号内的内容. <scrip ...
- SVD 学习笔记
本文主要学习了这篇博客:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html,将SVD讲的恨透 ...
- ACM_水题你要信了(修改版)
水题你要信了 Time Limit: 2000/1000ms (Java/Others) Problem Description: 某发最近又认识了很多妹(han)子,可是妹(han)子一多不免有时会 ...
- 利用python去除红章
近期接的一个需求需要去除图片的红章,用到了PIL库. from PIL import Image,ImageEnhanceimport os#f="5-12 - 0001.tif" ...
- C++ 由虚基类 虚继承 虚函数 到 虚函数表
//虚基类:一个类可以在一个类族中既被用作虚基类,也被用作非虚基类. class Base1{ public: Base1(){cout<<"Construct Base1!&q ...
- java 任意时间转换日期类型
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); try { Date dd=sdf.parse("201 ...
- Java 开源博客 Solo 1.3.0 发布 - Docker 支持
Solo 1.3.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 可以通过一个命令启动(不需要安装数据库.部署容器),也可以通过 war 方式部署容器,连接 MySQL.这应该是史上最容易 ...
- JS——select标签
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...