博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10012 How Big Is It?
阅读量:5153 次
发布时间:2019-06-13

本文共 1089 字,大约阅读时间需要 3 分钟。

UVA_10012

这个题目WA得满痛苦的,一开始不知道为什么会WA,后来意识到原来是少考虑了两个相邻的圆半径差别很大的情况,也就是说一个大圆下面可能可以放很多小圆,这时就又没头绪了。

后来看了别人的代码后,给了我很大的启发,原来可以在递归的过程中多引入一个表示当前放置的圆的圆心坐标的数组,来辅助计算。

我们以左下角为原点建立直角坐标系,暂且假设第一个圆是紧贴左下角放置的,然后用深搜枚举每个位置可能放的圆,并计算放置这个圆的圆心坐标。计算的时候要依次假设当前圆和前面的某一个圆相切,并依此来计算当前圆的圆心坐标,最后取所有结果的最大值,这样就得到了当前圆的放置时的实际的圆心坐标。

在放置完所有圆后,实际上可能存在某些圆的一部分是在y轴左半部分的,因而要求我们再遍历一遍所有放置好的圆,找到所有圆最左边点的位置,并记录成矩形的左边界,或者把y轴更新到这个位置上,也就是说要把所有圆的圆心坐标加上计算所得的值,这样就保证了x=0是矩形的左边的边界。之后就是计算右边的边界,同样,我们需要遍历一遍所有放置好的圆,找到所有圆最右边点的位置,把这个位置作为矩形右边的边界即可。

#include
#include
#include
int n,vis[10]; double a[10],A[10],c[10],ans; void dfs(int cur) {
int i,j; double move,temp,res; if(cur==n) {
move=0.0; for(i=0;i
move) move=temp; for(j=0;j
res) res=temp; } if(res
c[cur]) c[cur]=temp; } vis[i]=1; dfs(cur+1); vis[i]=0; } } int main() { int i,j,k,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i

  

转载于:https://www.cnblogs.com/staginner/archive/2011/09/06/2168591.html

你可能感兴趣的文章
noframes,frame,iframe,frameset 区别
查看>>
Android统计绘图工具
查看>>
Isequal IsequalToString containsString hasPrefixd的区别
查看>>
【原】关于cuteftp连不上Linux虚拟机的问题
查看>>
大众点评cat系统的搭建笔记
查看>>
[svc]sort-uniq
查看>>
[svc]mysql备份恢复及常用命令
查看>>
mysql存储引擎之MyISAM 和 InnoDB的比较
查看>>
Mybatis学习总结(五)——动态sql
查看>>
文件读、写相关的常用方法
查看>>
C#时间问题
查看>>
使用JSONP 实现跨域通信
查看>>
服务端性能测试校准v1.2
查看>>
【JavaScript】离线应用与客户端存储
查看>>
2014.12.3 ---Thema:Node.js
查看>>
[转载]启示录:产品原则和产品评审团
查看>>
USACO Training3.3 A Game【区间Dp】 By cellur925
查看>>
修改默认input type=file 样式
查看>>
django 基础框架学习 (二)
查看>>
python学习之内存机制
查看>>