据说题目很水 FZU - 2205 思路题

Sunday最近对图论特别感兴趣,什么欧拉回路什么哈密顿回路,又是环又是树。在看完一本书后,他对自己特别有信心,便找到大牛牛犇犇,希望他出一题来考考自己。

在遥远的古代东方有N个城市,它们之间可以通过双向的道路相连。任意两个城市由不超过一条道路直接相连,而且没有城市的道路连向自身。但是牛犇犇是个纯情的小伙子,尽管他还没有女朋友,但他还是很讨厌第三者,以至于讨厌三这个数字。所以他希望Sunday能够构造一个N个城市的地图,这个地图中不能有任意三个城市能够相互直接到达,而且地图中的道路数目最多。

牛犇犇考虑到Sunday是个菜鸟,所以只让他回答上述地图含有的道路数目,而不需要输出地图是由哪些道路组成。(题外话:其实只是因为special judge的评测程序比较麻烦而已)

Input

第一行一个整数T(1 <= T <= 100),表示测试数据的组数。

每组数据只包含一个N(1 <= N <= 1000),表示N个城市。

Output

每组数据输出仅有一行,表示在符合题意下N个城市所能连接的最大道路数目。

Sample Input
2
3
4
Sample Output
2
4

题意:现在有n个点,这n个点之间可以连一些线,两个点之间最多只能有一条线,现在连线要求是:任意选三个点,这三个点不能两两相连。1 连2,2连3,那么1就不能连3了,  任意三个点都有这个限制,求这n个点最多能有多少个连线?

思路:要想不出现三个点的环,有一个要求,新出现的点 不能同时连接 已经连接的两个点。及1连2,那么新出现的3,就不能同时连接1和2;  这个思路主要是这一条,就能解决该题。

1  个点的时候 :1

2  个点的时候 :1,2       (1-2)//我用这个来表示连线关系

3  个点的时候 :1,2,3        (1-2) (2-3)

4  个点的时候 :1,2,3,4        (1-2) (2-3) (1-4)(3-4)  

5  个点的时候 :1,2,3,4,5        (1-2) (2-3) (1-4)(3-4) (2-5)(4-5)

6  个点的时候 :1,2,3,4,5,6        (1-2) (2-3) (1-4)(3-4) (2-5)(4-5) (1-6)(3-6)(5-6)

7  个点的时候 :1,2,3,4,5,6,7        (1-2) (2-3) (1-4)(3-4) (2-5)(4-5) (1-6)(3-6)(5-6) (2-7)(4-7)(6-7)

你会发现新出现的点n先跟 n-1连接,因为相邻的两个点都已经连接了,所以每间隔一个就连接一个(这样能保证最多的连线)

#include <iostream>
#include <stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int ans[1500];
int main()
{
    ans[0]=0;
    for(int i=1;i<=1000;i++)
        ans[i]=ans[i-1]+i/2;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",ans[n]);
    }
}



猜你喜欢

转载自blog.csdn.net/xiangaccepted/article/details/79670704
今日推荐