HDU1466 计算直线的交点数
来源:互联网 发布:入骨相思知不知 编辑:程序博客网 时间:2024/05/22 15:07
计算直线的交点数 HDU1466
题目描述
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
Sample Input
2
3
Sample Output
0 1
0 2 3
解法
动态规划的思想,考虑dp[i]:
- dp[i]代表有 i 条直线时交点个数的集合
先将前 i - 1 条直线分为两组,其中一组 j 个直线与第 i 条直线平行,那么这j+1条直线与前i - 1条直线有(j+1)*(i-1-j)个交点,前(i-1-j)条直线间交点个数的集合为dp[i-1-j],那么有方程 - dp[i] = { dp[i-1-j][k] + (j+1)*(i-1-j) }
其中dp[i][k]代表集合dp[i]中第k个元素的值
#include<cstdio>#include<cstring>#include<set>using namespace std;set<int> dp[21];int main(){ int N; while(~scanf("%d",&N)) { for(int i=0;i<=N;i++) { dp[i].clear(); dp[i].insert(0); } for(int i=2;i<=N;i++) { for(int j=0;j<i;j++) { int temp = (j+1)*(i-1-j); set<int>::iterator it; for(it = dp[i-1-j].begin(); it != dp[i-1-j].end(); it++) { dp[i].insert(*it + temp); } } } set<int>::iterator it = dp[N].begin(); for(;it != dp[N].end(); it++) { int temp = *it; printf("%s%d",temp?" ":"",temp); } puts(""); } return 0;}
0 0
- hdu1466计算直线的交点数
- hdu1466 计算直线的交点数
- HDU1466 计算直线的交点数
- HDU1466 计算直线的交点数
- hdu1466 计算直线的交点数
- HDU1466 计算直线的交点数
- HDU1466 计算直线的交点数
- hdu1466计算直线的交点数
- hdu1466计算直线的交点数
- hdu1466 计算直线的交点数 DP
- HDU1466 计算直线的交点数
- 计算直线的交点数(hdu1466简单的dp)
- hdu1466 计算直线的交点数//dp+set
- HDU1466 计算直线的交点数 【DP】+【经典题】
- hdu1466 计算直线的交点数(找规律+数学)
- [HDU1466][动态规划DP]计算直线的交点数
- hdu1466 计算直线的交点个数
- hdu1466计算直线的交点数&2050 折线分割平面【DP】
- HDU 5387 Clock
- tableView - 自定义等高cell-xib方式
- 八种排序算法(C语言简易版)
- tableView - 自定义等高cell(frame和masonry方式)
- UVA 12486 Space Elevator(数位DP)
- HDU1466 计算直线的交点数
- KMP算法超详细入门
- arcgis切割多边形以及合并多边形
- 菜单状态更新
- android:layout_weight详解
- ArcGIS地质图矢量化技巧概要
- tableView-自定义非等高cell(1)
- lua 中pairs 和 ipairs区别
- HDU 5384 Danganronpa(AC自动机)