hdu1466 dp 直線交點問題

2021-07-09 22:55:32 字數 685 閱讀 6884

題意:

平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n=2,則可能的交點數量為0(平行)或者1(不平行)。

分析:題目意思很簡單,但是思路不好想呀。這個dp不是通過i條直線遞推i+1條直線。

結論是:

假若有k條直線可以有j個相交點,那麼i條直線一定可以有(i-k)*k+j個交點。

因為i條直線可以分為i-k條平行線以及k條自由線,那k條自由線能夠有j個交點剩下的i-k條平行線和那k條直線都不平行,那麼交點個數就為(i-k)*k,所以i條直線一定可以有(i-k)*k+j個交點。

至於結論是怎麼想出來的,天知道。

#include #include #include #include #include #include #include using namespace std;

int const maxn = 200;

int dp[21][maxn];

//dp[i][j]表示的是i條直線是否可以有j個交點,true或者false

void cal()

for(int i = 0 ; i <= 20 ; i++) //i條直線}}

}}int main()

printf("%d\n",n*(n-1)/2);

}return 0;

}

HDU 1466 計算直線的交點數 (dp)

來自杭電ppt上面的一道題目。n條直線互不平行且無三線共點的最多交點數max 1 2 n 1 n n 1 2,所以n 20的話,最大的交點數是190 本題是求有多少種交點數 容易列舉出n 1,2,3的情況 00,1 0,2,3 如果已知 無交點 2 第四條與其中兩條平行,交點數為 n 1 1 0 3...

HDU 1466 計算直線的交點數(dp)

description 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 input 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量.output 每個測試例項對應一行輸出,從...

HDU 1466 計算直線的交點數(DP)

problem description 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 input 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量.output 每個測試例項...