SGU[130] CIrcle

Description

描述

On a circle border there are 2k different points A1, A2, ..., A2k, located contiguously. These points connect k chords so that each of points A1, A2, ..., A2k is the end point of one chord. Chords divide the circle into parts. You have to find N - the number of different ways to connect the points so that the circle is broken into minimal possible amount of parts P.

在圆的边界上连续的排列着2k个不同的点A1, A2, ..., A2k。这些点连接着k条弦,因此A1, A2, ..., A2k分别是这些弦中一条弦的端点,这些弦将圆分成若干个部分。你需要计算N——圆被分成的最少的部分数目P,以及这样的方案数N。

InpPut

输入

The first line contains the integer k (1 <= k <= 30).

第一行包含一个整数k (1 <= k <= 30)。

Output

输出

The first line should contain two numbers N and P delimited by space.

第一行包含两个数字N和P,以空格分隔。

Sample Input

样例输入

2

Sample Output

样例输出

2 3

Analysis

分析

我们可以采用分治的方法,固定某个点,从其上引一条弦,将圆分成左右两部分。我们可以将这两部分看成新的圆,那么方案数就是这两个圆的方案数相乘。

即:f[N] = sigma(f[i - 1] * f[N - i]),其中1 <= i <= N。f[i-1]表示左边的圆,为k = i - 1时的情况,f[N - i]为右边的圆,表示k = N - i时的情况。

这样,我们只要递推一下就可以了。

Solution

解决方案

#include <iostream>

using namespace std;

const int MAX = 32;

long long f[MAX];

int main()
{
	int N;
	f[0] = 1; f[1] = 1; f[2] = 2;
	for(int i = 3; i < MAX; i++)
	{
		for(int j = 1; j <= i; j++)
		{ f[i] += f[j - 1] * f[i - j]; }
	}
	while(cin >> N)
	{ cout << f[N] << " " << N + 1 << endl; }
	return 0;
}

  

这也算是一道数学题,然而想到分治这一点还是有些难度的。

时间: 2024-11-02 00:40:38

SGU[130] CIrcle的相关文章

Python选修课第一届Turtle绘图大赛田康林赵冰珂组

点击此处查看视频 from turtle import* setup(600,600,200,200) #脸 penup() goto(-190,0) seth(-90) pendown() pencolor('goldenrod3') pensize(5) begin_fill() circle(190,360) fillcolor('lightgoldenrod1') end_fill() #画眉毛 penup() goto(-135,155) seth(30) pendown() penc

用python画小王八裤(turtle库)

一,采用Python语言如何画一朵玫瑰花 工具/原料 Python语言包 Win10 一. 准备 1. 打开界面: 打开python 2. 创建文件 二. 编程 1. 编写画图: from turtle import *#global pen and speedpencolor("black")fillcolor("red")speed(50)s=0.15#init poistionpenup()goto(0,600*s)pendown()begin_fill()c

Python turtle绘图实例分析

画一个红色的五角星 from turtle import * color('red','red') begin_fill() for i in range(5): fd(200) rt(144) end_fill() done() 效果图: 画一条蟒蛇 #PythonDraw.py import turtle #turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(

python基础训练营06

任务六 时长: 啥是佩奇代码复现 参考链接:https://mp.weixin.qq.com/s/whtJOrlegpWzgisYJabxOg 画一只佩奇: 代码: from turtle import * def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东.90-北.180-西.270-南) begin_fill()#准备开始填充图形 a=0.

两个撩妹的python项目

这两天刷爆朋友圈的莫过于一则「啥是佩奇」的视频短片,看完之后不由的感叹一句,好久没见过这么温情幽默的广告了! 作为一个python的学习者,让我萌生了用python画社会人的想法. 看这个图像可以发现,佩奇由各种曲线.类抛物线.类圆.类椭圆等组成.这里提到的“类”,是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条. 思路如下:选好画板大小,设置好画笔颜色,粗细,定位好位置,依次画鼻子,头.耳朵,眼睛,腮,嘴,身体,手脚,尾巴. 环境 语言:python3.7 编辑器:Pycharm 具体

小猪佩奇

from turtle import* def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东.90-北.180-西.270-南) begin_fill()#准备开始填充图形 a=0.4 for i in range(120): if 0<=i<30 or 60<=i<90: a=a+0.08 left(3) #向左转3度 forwar

ascii码所有字符对照表(包含汉字和外国文字)

http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/data/293635 [C] 纯文本查看 复制代码 01 #include <stdio.h>  02 void main( void ) 03 { 04     FILE *stream; 05     int i,j; 06     stream=fopen("ascii.txt&quo

数学计数原理(P&#243;lya,高精度):SGU 294 He&#39;s Circles

He's Circles He wrote n letters "X" and "E" in a circle. He thought that there were 2n possibilities to do it, because each letter may be either "X" or "E". But Qc noticed that some different sequences of letters ca

HDU-5868 Different Circle Permutation

Problem DescriptionYou may not know this but it's a fact that Xinghai Square is Asia's largest city square. It is located in Dalian and, of course, a landmark of the city. It's an ideal place for outing any time of the year. And now: There are N chil