守护雅典娜

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 609    Accepted Submission(s): 179

Problem Description

许多塔防游戏都是以经典的“守护雅典娜”为原型的。玩家需要建立各种防御工具来阻止怪物接近我们的女神——雅典娜。

这里,我们可以建造的防御工具只有标准圆形状的防御墙,建立在雅典娜与怪物出生点之间的防御墙数目越多,胜利的希望就越大。这里,将问题简化到一个二维坐标系里,并且假设雅典娜的坐标为原点(0, 0),怪物出生点的坐标为(X, Y)。有N个给定圆心坐标与半径的防御墙可以供玩家选择建立,但要保证所有的圆都不发生相切或相交的情况。注意这些雅典娜位置与怪物出生点位置也不能在墙壁的边缘,即表示防御墙的圆上。点的面积与墙的厚度都很小,可以忽略不计。

记住,在游戏开始之后,怪物可以沿着任何轨迹,选择突破最少的圆形防御墙来到雅典娜的身边,而一个防御墙一旦被突破,它就会失去保护作用。所以,你的方案必须足够优秀。为了守护女神,快去找出最优的建设方案吧!

Input

输入第一行为T,表示有T组测试数据。
每组数据以三个整数N,X,Y开始,接下去的N行每行包括三个整数Xi,Yi,Ri,表示一个可以选择的圆心为(Xi, Yi)半径为Ri的防御墙。

[Technical Specification]

1. 1 <= T <= 100
2. 1 <= N <= 1000
3. 1 <= Ri <= 10 000
4. -10 000 <= X, Y, Xi, Yi <= 10 000,坐标不会相同

Output

对每组数据,先输出为第几组数据,然后输出能够间隔在雅典娜与怪物出生点之间最多的防御墙数目。

Sample Input

  
3 1 5 5 1 0 2 1 5 5 1 0 9 3 5 5 1 0 2 4 5 2 2 0 6

Sample Output

  
Case 1: 1 Case 2: 0 Case 3: 2

Source

2013金山西山居创意游戏程序挑战赛——复赛(2) 

Recommend

liuyiding
#include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
using namespace std;const int MAXN=1010;
struct Node
{int x,y;int r;
};
bool cmp(Node a,Node b)
{return a.r<b.r;
}
int dis2(Node a,Node b)
{return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Node node[MAXN];
Node node1[MAXN];
Node node2[MAXN];
int dp1[MAXN];
int dp2[MAXN];
int main()
{int T;int n;int iCase=0;Node st;st.x=0;st.y=0;Node ed;scanf("%d",&T);while(T--){iCase++;printf("Case %d: ",iCase);scanf("%d",&n);scanf("%d%d",&ed.x,&ed.y);int t1=0;int t2=0;for(int i=0;i<n;i++){scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].r);int d1=dis2(st,node[i]);int d2=dis2(ed,node[i]);if(d1==node[i].r*node[i].r||d2==node[i].r*node[i].r)continue;if(d1<node[i].r*node[i].r&&d2<node[i].r*node[i].r)continue;if(d1>node[i].r*node[i].r&&d2>node[i].r*node[i].r)continue;if(d1<node[i].r*node[i].r){node1[t1++]=node[i];}else node2[t2++]=node[i];}sort(node1,node1+t1,cmp);sort(node2,node2+t2,cmp);int ans1=0,ans2=0;for(int i=0;i<t1;i++){dp1[i]=1;for(int j=0;j<i;j++){int d=dis2(node1[i],node1[j]);if(node1[i].r>node1[j].r && d<(node1[i].r-node1[j].r)*(node1[i].r-node1[j].r))dp1[i]=max(dp1[i],dp1[j]+1);}ans1=max(ans1,dp1[i]);}for(int i=0;i<t2;i++){dp2[i]=1;for(int j=0;j<i;j++){int d=dis2(node2[i],node2[j]);if( node2[i].r>node2[j].r && d<(node2[i].r-node2[j].r)*(node2[i].r-node2[j].r))dp2[i]=max(dp2[i],dp2[j]+1);}ans2=max(ans2,dp2[i]);}int ans=max(ans1,ans2);for(int i=0;i<t1;i++)for(int j=0;j<t2;j++){int d1=dis2(node1[i],node2[j]);if(d1>(node1[i].r+node2[j].r)*(node1[i].r+node2[j].r))ans=max(ans,dp1[i]+dp2[j]);}printf("%d\n",ans);}return 0;
}

HDU4562 守护雅典娜(DP)相关推荐

  1. hdu4562 守护雅典娜 DP

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  2. hdu4562 守护雅典娜

    先筛选出来两种圆,一种是包含雅典娜,不包含怪兽的,一种是不包含雅典娜,包含怪兽的,然后圆的半径大小排序,分别对两种圆dp,最后合并两种DP,求出最大的就是结果 #include <cstdio& ...

  3. 杭电acm4562守护雅典娜 (dp+圆)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  4. HDU 4562 守护雅典娜(dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  5. hdu 4562 守护雅典娜(计算几何+dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  6. 守护雅典娜 HDU-4562

    vj链接: 守护雅典娜 题目描述: 许多塔防游戏都是以经典的"守护雅典娜"为原型的.玩家需要建立各种防御工具来阻止怪物接近我们的女神--雅典娜. 这里,我们可以建造的防御工具只有标 ...

  7. HDOJ - 4562/西山居复赛2 守护雅典娜

    比赛的时候WA得一塌糊涂~~原因!..读题粗心了!!上一题的输出是Case #1: 0 , 而本题居然是Case 1: 1 ... 同一套题..神坑... 思路很简单了..能产生防御效果的..无非是能 ...

  8. hdu 4562 守护雅典娜 (Simple Geometry + dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4562 中文题. 这道题的做法是先筛选出那些能够起到分隔雅典娜和怪兽的圆,就是那些只包围雅典娜或者只包围怪兽的圆, ...

  9. HDU 4562 守护雅典娜(金山复赛第二场)

    题意是塔防建塔,要求建最多塔 然后符合的情况是: rt 红色是允许的,蓝色是不允许的 输入时选择红色的 然后dp1 ath的圈,再dp2 mon的圈,最后dp3这两种圈的总和 dp1和dp2中能增加的 ...

最新文章

  1. 浅谈Javascript事件模拟
  2. 羊皮卷的实践-第二十一章
  3. LeetCode374 猜数字大小 (二分法)
  4. 一次简单的代码封装经历
  5. 【Java集合系列】---ArrayList
  6. boost::locale::to_upper用法的测试程序
  7. 无法嵌入互操作类型“SHDocVw.ShellWindowsClass”。请改用适用的接口
  8. QQ病毒越来越人性化了
  9. Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
  10. 最小新整数(信息学奥赛一本通-T1231)
  11. php里建立数据库和表,PHP 创建数据库和表 | w3cschool菜鸟教程
  12. Vue 服务端渲染(SSR)、Nuxt.js - 从入门到实践
  13. [ctfshow]web入门——命令执行(web54-web71)
  14. 用css+jquery实现视频永远占满全屏效果
  15. 通过tasker实现朗读微信QQ文字消息
  16. 内容创业洗稿,知识付费拆书
  17. powerVR tbdr 硬件架构理解
  18. 关于出现Merge remote-tracking branch ‘origin/develop‘ into develop这种commit记录的原因
  19. DSP6713 Simulator HelloWorld与LED
  20. [hive 报错]:FAILED:SemanticException [Error 10025] Expression not in GROUP BY key

热门文章

  1. 基于JAVA校园互助平台计算机毕业设计源码+数据库+lw文档+系统+部署
  2. python模拟Get请求保存网易歌曲的url
  3. 软件工程实践团队作业一
  4. 6.4.3 相关还款责任信息
  5. Excel常用快捷键,你也可以成为大家口中的大神
  6. vue中export和export default
  7. JavaWeb之Ajax,省市联动及无刷新数据分页
  8. vue-cli3 天地图添加热力图
  9. asio(一)、同步定时器
  10. 探索大恒图像|MER2-301-125U3C在制造行业玻璃瓶质量检测的应用