## 模拟题6
**问题描述**
```
　　小明和朋友们一起去郊外植树，他们带了一些在自己实验室精心研究出的小树苗。
　　小明和朋友们一共有 n 个人，他们经过精心挑选，在一块空地上每个人挑选了一个适合植树的位置，总共 n 个。他们准备把自己带的树苗都植下去。
　　然而，他们遇到了一个困难：有的树苗比较大，而有的位置挨太近，导致两棵树植下去后会撞在一起。
　　他们将树看成一个圆，圆心在他们找的位置上。如果两棵树对应的圆相交，这两棵树就不适合同时植下（相切不受影响），称为两棵树冲突。
　　小明和朋友们决定先合计合计，只将其中的一部分树植下去，保证没有互相冲突的树。他们同时希望这些树所能覆盖的面积和（圆面积和）最大。
```
**输入格式**
```
　　输入的第一行包含一个整数 n ，表示人数，即准备植树的位置数。
　　接下来 n 行，每行三个整数 x, y, r，表示一棵树在空地上的横、纵坐标和半径。
```
**输出格式**
```
　　输出一行包含一个整数，表示在不冲突下可以植树的面积和。由于每棵树的面积都是圆周率的整数倍，请输出答案除以圆周率后的值（应当是一个整数）。

```
**样例输入**
```
6
1 1 2
1 4 2
1 7 2
4 1 2
4 4 2
4 7 2
```
**样例输出**
```
12
```

**评测用例规模与约定**

```
　　对于 30% 的评测用例，1 <= n <= 10；
　　对于 60% 的评测用例，1 <= n <= 20；
　　对于所有评测用例，1 <= n <= 30，0 <= x, y <= 1000，1 <= r <= 1000。
请选择编程语言 
```

1







```
import math
n=int(input())
x=[0]*n
y=[0]*n
r=[0]*n
s=[0]*n
map_=[]
for i in range(n):
    x[i],y[i],r[i]=map(int,input().split())
    s[i]=r[i]*r[i]   #math.pi*
    map_.append([x[i],y[i],r[i],s[i]])
sorted(map_, key=lambda x:(x[-1])) 
i=2
s_res=map_[-1][-1]
temp=[map_[-1]]
while i<=n:
    label=1
    for j in range(len(temp)):
        if (temp[j][0]-map_[-i][0])**2+(temp[j][1]-map_[-i][1])**2<(temp[j][2]+map_[-i][3])**2:
            label=0
    if label==1:
        print(map_[-i])
        temp.append(map_[-i])
        s_res+=map_[-i][-1]
    i+=1
    
print(s_res)
```

    6
    1 1 2
    1 4 2
    1 7 2
    4 1 2
    4 4 2
    4 7 2
    [4, 1, 2, 4]
    8



```
print(temp)
a=100
def b():
    print(a)
b()
```

    [[4, 7, 2, 4], [4, 1, 2, 4]]
    100



```
import math
n=int(input())
x=[0]*n
y=[0]*n
r=[0]*n
# s=[0]*n
# map_=[]
for i in range(n):
    x[i],y[i],r[i]=map(int,input().split())
    #s[i]=r[i]*r[i]   #math.pi*
global ans
ans=0
vis=[False]*n
def cal(i):
    for j in range(n):
        if i!=j and vis[j]:
            dis=(x[i]-x[j])**2+(y[i]-y[j])**2
            if dis<(r[i]+r[j])**2:
                return False
    return True
def dfs(step,sum_):
    if step==n:
        global ans
        t=max(ans,sum_)
#         print(sum_)
        ans=t
        return 
    for i in range(n):
        if not vis[i]:
            temp=r[i]
            if not cal(i):
                r[i]=0
            vis[i]=True
            dfs(step+1,sum_+r[i]*r[i])
            vis[i]=False
            r[i]=temp
dfs(0,0)
print(ans)
```

    6
    1 1 2
    1 4 2
    1 7 2
    4 1 2
    4 4 2
    4 7 2
    12