Sunday最近對圖論特別感興趣,什麼歐拉回路什麼哈密頓迴路,又是環又是樹。在看完一本書後,他對自己特別有信心,便找到大牛牛犇犇,希望他出一題來考考自己。
在遙遠的古代東方有N個城市,它們之間可以通過雙向的道路相連。任意兩個城市由不超過一條道路直接相連,而且沒有城市的道路連向自身。但是牛犇犇是個純情的小夥子,儘管他還沒有女朋友,但他還是很討厭第三者,以至於討厭三這個數字。所以他希望Sunday能夠構造一個N個城市的地圖,這個地圖中不能有任意三個城市能夠相互直接到達,而且地圖中的道路數目最多。
牛犇犇考慮到Sunday是個菜鳥,所以只讓他回答上述地圖含有的道路數目,而不需要輸出地圖是由哪些道路組成。(題外話:其實只是因爲special judge的評測程序比較麻煩而已)
第一行一個整數T(1 <= T <= 100),表示測試數據的組數。
每組數據只包含一個N(1 <= N <= 1000),表示N個城市。
每組數據輸出僅有一行,表示在符合題意下N個城市所能連接的最大道路數目。
2 3 4Sample 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]);
}
}