1466 计算直线的交点数
2012-03-22 23:22
211 查看
# include <iostream> # include <cstdio> using namespace std; int main() { int n, i, j, k; int edge[21][191]; for (i=1; i<21; ++i) { for (j=0; j<=190; ++j) { if (j == 0) edge[i][j] = 1; else edge[i][j] = 0; } } for (i=2; i<=20; ++i) { for (j=i-1; j>=1; --j) { for (k=0; k<=190; ++k) { if (edge[i-j][k] == 1) { edge[i][k+(i-j)*j] = 1; } } } } while (scanf("%d", &n)!=EOF) { cout<<"0"; for(j=1;j<=n*(n-1)/2;j++) if(edge [j]) cout<<" "<<j; cout<<endl; } return 0; }
计算直线的交点数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2283 Accepted Submission(s): 989
Problem Description
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.
Output
每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。
Sample Input
2 3
Sample Output
0 1 0 2 3
解题思路:
对于任意的n(n为正整数)条直线
有以下情况:
1条平行(全不平行)时,(n-1)条线的所有情况+(n-1)*1
2条平行,(n-2)条线的所有情况+(n-2)*2
...
i条平行,(n-i)条线的所有情况+(n-i)*i
...
n-1条平行,1条线的所有情况+ 1*(n-1)
以上所说i条平行,是指保证其余n-i条一定不平行
相关文章推荐
- hdu 1466 计算直线的交点数(动态规划)
- hdoj 1466 计算直线的交点数 【dp】
- HDOJ1466(计算直线的交点数)dp
- hdoj 1466 计算直线的交点数 (几何 DP)
- 杭电 1466 计算直线的交点数
- hdu 1466 计算直线的交点数
- HDU 1466 计算直线的交点数
- hdu 1466 计算直线的交点数
- hdu 1466 计算直线的交点数 第四专…
- 【HDU】 1466 计算直线交点…
- HDOJ 1466 计算直线的交点数
- G题 hdu 1466 计算直线的交点数
- HDU 1466 计算直线的交点数
- hdoj1466 计算直线的交点数 ( DP )
- HDU 1466 计算直线的交点
- 杭电-1466 计算直线的交点数
- hdu1466 计算直线的交点数
- hdu 1466 计算直线的交点数
- 1466 计算直线的交点数
- hdu1466 计算直线的交点数//dp+set