HDU2050(分平面问题)
分平面问题:
一、n条直线最多分平面问题。
n条直线最多可以把平面分成多少个区域?
此类问题主要采用递归的思想。当有n-1条直线时,平面最多被分成了f(n-1)块区域。如果要使第n条直线分的区域最多,就要让第n条直线与每条直线相交且交点不能重合。这样就会的到n-1个交点,将第n条直线分成了n-2条线段和两条射线。通过观察发现每一条线段或者直线都将其通过的区域一分为2,于是平面就多出了n块区域。
即:
f(n) = f(n-1) + n
= f(n-2) + (n – 1) + n
…
= f(1) + 2 + 3 + … + n
= n*(n + 1)/2 + 1
二、 n条折线最多分平面问题。
n条折线最多可以把平面分成多少个区域?
类比于直线。当有n-1条折线时,平面最多被分成了f(n-1)块区域。如果要使第n条折线分的区域最多,就让它的两条射线分别与每一条折线的两条射线相交且交点互不重合。这样第n条折线的每条射线上就得到了2(n-1)个交点,将射线分成了2(n-1)条线段和一条射线。但是折角处的两条线段之分出了一块区域,所以一共多出了4(n-1)+1块区域。
即:
f(n) = f(n-1) + 4(n – 1) + 1
= f(n-2) + 4(n – 2) + 4(n – 1) + 2
…
= f(1) + 4[1 + 2 + … (n-1)] + n
= 2n^2 + n
三、 封闭曲面分平面问题。
设有n条封闭曲线在平面上,任何两条封闭曲线相交于两点,任何三条封闭曲线不相较于一点,问这些封闭曲面把平面分割成的区域个数。
为了简化思考可将封闭曲线看成圆,当有n-1个圆形时将平面分成了f(n-1)块区域。现增加第n个圆,于是此圆的周边上有2(n-1)个点,曲线被分成了2(n-1)个圆弧,每个圆弧可使平面增加一个区域。于是平面增加了2(n-1)个区域。
即:
f(n) = f(n-1) + 2(n – 1)
= f(n-2) + 2(n – 2) + 2(n – 1)
…
= f(1) + 2[1 + 2 + … + (n – 1)]
= n^2 – n + 2
四、平面分割空间问题。
由类比的方法可以猜出,平面分割空间的个数应该与平面的交线个数有关。于是当有n-1个平面时将空间分成了f(n-1)块区域。增加第n个平面时,另其与每一个平面都有一条交线且每一条交线互不重合互不平行。于是平面上就有了n-1条直线。由问题一可知这些直线一共将次平面分成了n(n-1)/2+1块面,显然每一块面都可使空间多出一块区域。于是空间多出n(n-1)/2+1块区域。
即:
f(n) = f(n-1) + n(n – 1)/2 + 1
= f(n-2) + (n – 2)(n – 1)/2 + n(n – 1)/2 + 2
…
= f(1) + 1*2/2 + 2*3/2 + 3*4/2 + … + n(n – 1)/2 + (n – 1)
= [(1^2 + 2^2 + … + n^2) – (1 + 2 + … + n)]/2 + n + 1
由平方和公式 1^2 + 2^2 + … + n^2 = n(n + 1)(2n + 1)/6得
f(n) = (n^3 + 5n)/6 + 1
折线分割平面
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23336 Accepted Submission(s): 15903
Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
Author
lcy
Source
Recommend
lcy
Statistic | Submit | Discuss | Note
#include<stdio.h> int main()
{
int c;
scanf("%d", &c);
while(c--) {
int n;
scanf("%d", &n);
printf("%d\n", * n * n - n + );
}
return ;
}
HDU2050(分平面问题)的更多相关文章
- UVALive 6263 The Dragon and the knights --统计,直线分平面
题意:给n条直线,将一个平面分成很多个部分,再给m个骑士的坐标,在一个部分内只要有一个骑士即可保护该部分,问给出的m个骑士是不是保护了所有部分. 解法:计算每个骑士与每条直线的位置关系(上面还是下面) ...
- 2019 杭电多校第八场 HDU - 6665 Calabash and Landlord 两矩形分平面
题意 给出两个矩形,问这两个矩形把平面分成了几部分. 分析 不需要什么高级技能,只需 “简单” 的分类讨论. (实在太难写了,对拍找出错误都不想改 推荐博客,其中有个很好的思路,即只讨论答案为2,3, ...
- 【分割平面,分割空间类题】【HDU1290 HDU2050】
HDU 2050 折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdoj 2050 折线分割平面
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu2050(递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050 (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域. 析:可能你 ...
- HDU_2050——折线分割平面问题,递推
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
- HDU - 2050 - 折线分割平面(数学 + dp)
题意: 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分 思路: 记住结论.. ...
- hdu 1290_献给杭电五十周年校庆的礼物
Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...
- HDU100题简要题解(2050~2059)
HDU2050 折线分割平面 题目链接 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以 ...
随机推荐
- 用CSS创建小三角形问题(笔试题常考)
笔试题中经常遇到用CSS实现某个Div边框添加三角形问题,掌握一点,合理利用div的边框,当div有宽有高时,边框就是不起眼的边框,当div的宽高为0时,边框就是一个小方块,把剩下的三个边透明就是神奇 ...
- HTML5 离线缓存
离线资源缓存 为了能够让用户在离线状态下继续访问 Web 应用,开发者需要提供一个 cache manifest 文件.这个文件中列出了所有需要在离线状态下使用的资源,浏览器会把这些资源缓存到本地. ...
- 七.生成n位随机字符串
--1.借助newid() go --创建视图(因为在函数中无法直接使用newid()) create view vnewid as select newid() N'MacoId'; go --创建 ...
- iOS开发中EXC_BAD_ACCESS的另类原因
今天偶然学习iOS开发的时候碰到一个EXC_BAD_ACCESS的异常,经查资料得到的解释是由于访问了已经被回收了堆内存对象导致的,参考: http://code.tutsplus.com/tutor ...
- css水平居中的小小探讨
水平居中是常用的几种布局方式之一.主要分为行内元素的居中,块元素的居中.块元素的居中还分为固定宽度的居中,不定宽度的居中.行内元素的居中,使用text-align:center就可以实现,已知宽度的块 ...
- PHP后台传值
前台数据往后台传值,往往是新手最头痛的,最近在学习thinkPHP的时候,也遇到了这种问题,总结一下,往不足之处请大家指教. 一.前台界面代码,往后台传值有两种方式,一种是get,另一种是post,新 ...
- 分享一个md5类
这个md5干嘛用的,大家比我清楚就不说了,这里不是讲md5的原理.要讲md5的原理,网上一大堆,我也不是什么算法很厉害的人,我只是算法搬运工.咱是一般程序员,有时候能完成业务需要就可以,那些伟大算法的 ...
- C++中L和_T()之区别(转)
C++中L和_T()之区别 分类: C/C++2011-01-12 11:45 2878人阅读 评论(1) 收藏 举报 c++编译器apic 字符串前面加L表示该字符串是Unicode字符串._T是一 ...
- z-index的理解 z-index 属性仅在节点的 position 属性为 relative, absolute 或者 fixed 时生效.
今天做游戏的Exercise模式的时候,发现把所有的div设置为position:absolute;后,点击play进入到游戏界面的时候,鼠标点击数字的时候,完全没反应.经过我的反复检查,发现只要给所 ...
- java jdbc 连接mysql 数据库
JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...