題意:
平面上有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 每個測試例項...