P2924 [USACO08DEC]大栅栏Largest Fence

传送门

反正我是看不出来这题和凸包有什么关系……大佬们是怎么想到的……
不准确一点的说,本题就是要我们求一个边上点数最多的凸包
我们可以先把所有的边都取出来,然后按极角排序。枚举这个凸包的起点,然后做dp即可
复杂度\(O(n^3)\)

//minamoto
#include<bits/stdc++.h>
#define rint register int
using namespace std;
const int N=305;
struct node{int u,v;double x,y;}p[N],e[N*N];int f[N];
inline bool cmp(node a,node b){return atan2(a.x,a.y)<atan2(b.x,b.y);}
int main(){
//  freopen("testdata.in","r",stdin);
    int n,tot=0,ans=0;scanf("%d",&n);
    for(rint i=1;i<=n;++i)scanf("%lf%lf",&p[i].x,&p[i].y);
    for(rint i=1;i<=n;++i)for(rint j=1;j<=n;++j)if(i!=j){
        e[++tot]={i,j,p[j].x-p[i].x,p[j].y-p[i].y};
    }sort(e+1,e+1+tot,cmp);
    for(rint i=1;i<=n;++i){
        memset(f,0xef,sizeof(f));f[i]=0;
        for(rint j=1;j<=tot;++j)
        f[e[j].v]=max(f[e[j].v],f[e[j].u]+1);
        ans=max(ans,f[i]);
    }printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/9989359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值