CSUOJ 1284 Cutting Cake(递推)
2016-07-13 20:36
357 查看
1284: Cutting Cake
Description
一个蛋糕切N刀,最多能得到多少块?切的过程中不能改变任意一块蛋糕的位置。
Input
输入数据的第一行包含一个整数T (1 <= T <= 100),表示接下来一共有T组测试数据。每组测试数据占一行,包含一个整数N (1 <= N <= 100),含义同上。
Output
用一行输出一个整数,表示上述问题的答案。
Sample Input
3 2 3 4
Sample Output
4 8 15
平面分割空间问题,由二维的分割问题可知,平面分割与线之间的交点有关,即交点决定射线和线段的条数,从而决定新增的区域数。试想在三维中则是否与平面的交线有关呢?当有n-1个平面时,分割的空间数为f(n-1)。要有最多的空间数,则第n个平面需与前n-1个平面相交,且不能有共同的交线。即最多有n-1 条交线。而这n-1条交线把第n个平面最多分割成g(n-1)个区域。(g(n)为(1)中的直线分平面的个数)此平面将原有的空间一分为二,则最多增加g(n-1)个空间。
故:f=f(n-1)+g(n-1) ps:g(n)=n(n+1)/2+1
=f(n-2)+g(n-2)+g(n-1)
……
=f(1)+g(1)+g(2)+……+g(n-1)
=2+(1*2+2*3+3*4+……+(n-1)n)/2+(n-1)
=(1+2^2+3^2+4^2+……+n^2-1-2-3-……-n )/2+n+1
=(n^3+5n)/6+1
代码如下:
#include <cstdio> typedef long long ll; ll f[105] = {0,2,4}; int main() { int t,n,i,j,k; for(i = 3;i < 101;i++){ f[i] = (i * i * i + 5 * i) / 6 + 1; } while(scanf("%d",&t) != EOF){ for(i = 0;i < t;i++){ scanf("%d",&n); printf("%lld\n",f ); } } return 0; }
相关文章推荐
- CSUOJ 1772 漫漫上学路(卡特兰数 || 递推)
- CSUOJ 1729 齿轮传动(基础DP)
- CSUOJ 1511 残缺的棋盘(BFS)
- 湖南省第九届大学生计算机程序设计竞赛 高桥和低桥
- CSUOJ nineteen thirteen One big silly dragon gives gifts out 线段树 二分 转化
- CSUOJ 1942 Sort String 线段树 操作变换
- CSUOJ 1939 World's end BFS 仔细思考
- CSUOJ 1945 最简单的题目 背包问题
- 100道动态规划——40 CSUOJ 1889 Copying DNA 记忆化搜索 DP的感觉
- CSUOJ 1861 Unscrambling Images 直接模拟,题面有点难看
- CSUOJ 1862 The Same Game 模拟消消乐
- Password Hacking CSU 1966
- CSUOJ 1898 复盘拉火车(栈+队列模拟)
- CSUOJ 1885 条条大路通罗马(最长路径)
- CSUOJ 1005 Binary Search Tree analog(二叉搜索树模拟)
- CSUOJ 1219 建食堂(两点之间最大距离最小)
- CSUOJ 1010 Water Drinking(BFS)
- CSUOJ 1808 地铁(最短路)
- CSUOJ 1256 天朝的单行道(最短路)
- CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)