[BZOJ4581][Usaco2016 Open]Field Reduction(dfs)
2016-11-16 14:36
393 查看
题目描述
传送门题解
之前做过一个叫做覆盖问题的大暴搜,这道题和那个有点相似吧。。但是明显要简单很多啊。。可以发现一坨散列的点一定有上下左右边界,每次要删的话只有把某一个边界上的点全删了才是有意义的。那么每一次暴力枚举当前删哪个边界上的点,又因为只需要删掉3个点,dfs的话层数最多是3,所以时间复杂度≈O(10∗43∗n)≈0.32s,还是非常快的。
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define LL long long #define N 50005 const LL inf=1e18; int n; LL x ,y ,ans; bool vis ; void dfs(int dep) { LL minx=inf,miny=inf,maxx=-inf,maxy=-inf; int cnt; for (int i=1;i<=n;++i) if (!vis[i]) minx=min(minx,x[i]),miny=min(miny,y[i]),maxx=max(maxx,x[i]),maxy=max(maxy,y[i]); LL area=(maxx-minx)*(maxy-miny); if (!dep) { ans=min(ans,area); return; } cnt=0; for (int i=1;i<=n;++i) if (x[i]==minx) cnt++; if (cnt&&cnt<=dep) { for (int i=1;i<=n;++i) if (x[i]==minx) vis[i]=1; dfs(dep-cnt); for (int i=1;i<=n;++i) if (x[i]==minx) vis[i]=0; } cnt=0; for (int i=1;i<=n;++i) if (y[i]==miny) cnt++; if (cnt&&cnt<=dep) { for (int i=1;i<=n;++i) if (y[i]==miny) vis[i]=1; dfs(dep-cnt); for (int i=1;i<=n;++i) if (y[i]==miny) vis[i]=0; } cnt=0; for (int i=1;i<=n;++i) if (x[i]==maxx) cnt++; if (cnt&&cnt<=dep) { for (int i=1;i<=n;++i) if (x[i]==maxx) vis[i]=1; dfs(dep-cnt); for (int i=1;i<=n;++i) if (x[i]==maxx) vis[i]=0; } cnt=0; for (int i=1;i<=n;++i) if (y[i]==maxy) cnt++; if (cnt&&cnt<=dep) { for (int i=1;i<=n;++i) if (y[i]==maxy) vis[i]=1; dfs(dep-cnt); for (int i=1;i<=n;++i) if (y[i]==maxy) vis[i]=0; } } int main() { scanf("%d",&n);ans=inf; if (n<=4) { puts("0"); return 0; } for (int i=1;i<=n;++i) scanf("%lld%lld",&x[i],&y[i]); LL minx=inf,miny=inf,maxx=-inf,maxy=-inf; for (int i=1;i<=n;++i) minx=min(minx,x[i]),miny=min(miny,y[i]),maxx=max(maxx,x[i]),maxy=max(maxy,y[i]); ans=(maxx-minx)*(maxy-miny); dfs(3); printf("%lld\n",ans); }
相关文章推荐
- bzoj 4581: [Usaco2016 Open]Field Reduction (dfs)
- 【bzoj 4581】[Usaco2016 Open]Field Reduction(dfs)
- 【BZOJ 4581】【Usaco2016 Open】Field Reduction
- 【BZOJ4580】[Usaco2016 Open]248【区间DP】【或 贪心】
- bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏【dfs】
- [BZOJ4580][Usaco2016 Open]248(dp)
- 【bzoj4579】[Usaco2016 Open]Closing the Farm 并查集
- bzoj 4579 [Usaco2016 Open]Closing the Farm
- 【BZOJ 4580】【Usaco2016 Open】248
- BZOJ4580: [Usaco2016 Open]248
- bzoj 4586: [Usaco2016 Open]Landscaping 堆
- BZOJ 4582: [Usaco2016 Open]Diamond Collector
- 【BZOJ 4582】【Usaco2016 Open】Diamond Collector
- bzoj 4580: [Usaco2016 Open]248
- 【BZOJ4579】[Usaco2016 Open]Closing the Farm【并查集】【离线】
- bzoj 1621: [Usaco2008 Open]Roads Around The Farm分岔路口【dfs】
- 【BZOJ 4579】【Usaco2016 Open】Closing the Farm
- BZOJ1647: [Usaco2007 Open]Fliptile 翻格子游戏 Dfs
- 【BZOJ4582】【Usaco2016 open】Diamond Collector 贪心
- 【BZOJ4576】【BZOJ4580】【Usaco2016 Open】262144 贪心