题目链接

题意:把一个正多边形分成数个三角形或者四边形,问有多少种方案。

题解:

如果分出的全为三角形的话,那就是正多边形三角剖分问题。它的结果就是Catalan数。现在也可以划分出四边形的话,可以采用动态规划策略。具体如下:

将n边形的顶点按顺时针或逆时针编号为1,2,3....n(n>=3),设T(n)为最终的结果,E(i,j)为i号顶点和j号顶点连成的对角线(1<=i<j<=n),我们定义T(2)=1.分两种情况讨论:
(1)边E(1,n)为划分后一个三角形的一条边。i为该三角形的另外一个顶点(2<=i<=n-1),因此,对角线E(1,i)和对角线E(i,n)将n边形分为1个i边形,1个由顶点(1,i,n)组成的三角形,1个(n-i+1)边形;这种情况下,问题规模缩小为小i边形,和(n-i+1)边形的。此时的种数为:
                 a=∑T(i)*T(n-i+1)   (2<=i<=n-1)
(2)边E(1,n)为划分后一个四边形的一条边。i,j为该四边形的另外两个顶点(2<=i<=n-2,i+1<=j<=n-1)。1,n,i,j四个顶点将n边形分为1个i边形,1个j-i+1边形,1个n-j+1边形和该四边形。我们可以继续将i边形,j-i+1,n-j+1边形继续划分,规模也将继续缩小。此时的种数为:
                 b=∑∑T(i)*T(j-i+1)*T(n-j+1); (2<=i<=n-2,i+1<=j<=n-1)
故T(n)=a+b=∑T(i)*T(n-i+1)+∑∑T(i)*T(j-i+1)*T(n-j+1);
此时的时间复杂度为O(n^3),会TLE,我们可以将上述表达式写成以下形式以降低时间复杂度 
                 U(n)=∑T(i)*T(n-i+1);(2<=i<=n-1)
                 T(n)=U(n)+∑T(i)*U(n-i+1);(2<=i<=n-2)
这样我们可以获得O(n^2).

关于对结果的取余,unsigned long long是自动对2^64取余的。

#include <cstdio>
using namespace std;
const int maxn=;
unsigned long long a[maxn],b[maxn];
unsigned long long n;
void init()
{
for(int i=;i<;i++)
{
a[i]=;
b[i]=;
}
for(int i=;i<=;i++)
{
a[i]=;
for(int j=;j<=i-;j++)
a[i]=a[i]+b[j]*b[i-j+];
b[i]=a[i];
for(int j=;j<=i-;j++)
b[i]=b[i]+b[j]*a[i-j+];
}
}
int main()
{
init();
while(scanf("%llu",&n)!=EOF)
printf("%llu\n",b[n]);
return ;
}

POJ 3597 Polygon Division (DP)的更多相关文章

  1. POJ 3597 Polygon Division 多边形剖分

    题目链接: http://poj.org/problem?id=3597 Polygon Division Time Limit: 2000MSMemory Limit: 131072K 问题描述 G ...

  2. POJ 1179 - Polygon - [区间DP]

    题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...

  3. IOI 98 (POJ 1179)Polygon(区间DP)

    很容易想到枚举第一步切掉的边,然后再计算能够产生的最大值. 联想到区间DP,令dp[i][l][r]为第一步切掉第i条边后从第i个顶点起区间[l,r]能够生成的最大值是多少. 但是状态不好转移,因为操 ...

  4. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  5. POJ 2995 Brackets 区间DP

    POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...

  6. WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp

    title: WOJ1022 Competition of Programming 贪心 date: 2020-03-19 13:43:00 categories: acm tags: [acm,wo ...

  7. POJ 3140.Contestants Division 基础树形dp

    Contestants Division Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10704   Accepted:  ...

  8. POJ 3140 Contestants Division 树形DP

    Contestants Division   Description In the new ACM-ICPC Regional Contest, a special monitoring and su ...

  9. POJ 3140 Contestants Division (树dp)

    题目链接:http://poj.org/problem?id=3140 题意: 给你一棵树,问你删去一条边,形成的两棵子树的节点权值之差最小是多少. 思路: dfs #include <iost ...

随机推荐

  1. rpc优化

    1.刷文章列表的时候,发现调用总时间100ms ,其中调策略是花了60ms,一个开源的map方法dozer,组装bean要花40ms 2.redis的zounct方法,传 1和-1的时候有时候会返回0 ...

  2. H5项目常见问题汇总及解决方案

    H5项目常见问题汇总及解决方案 H5   2015-12-06 10:15:33 发布 您的评价:       4.5   收藏     4收藏 H5项目常见问题及注意事项 Meta基础知识: H5页 ...

  3. 字符串匹配算法——KMP算法

    处理字符串的过程中,难免会遇到字符匹配的问题.常用的字符匹配方法 1. 朴素模式匹配算法(Brute-Force算法) 求子串位置的定位函数Index( S, T, pos). 模式匹配:子串的定位操 ...

  4. HDU 4923 Room and Moor

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4923 解题报告:给出一个长度为n的只包含0和1的序列,是否存在一个序列Bi满足一下条件: 1.     ...

  5. angularjs表达式中的HTML内容,如何不转义,直接表现为html元素

    在模板中直接: 在ionic中直接使用: <p class="contentwen" ng-bind-html="detial.content">& ...

  6. 在Android工程中运行main函数

    在main函数中右键 --> Run As --> Run Configurations.. Java Application中的类 --> Classpath --> Boo ...

  7. 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...

  8. OOP复习笔记

    /*OOP相关的代名词不做讲解*/ OOP的三大特征: 封装 - 继承 - 多态 -----------------------------------目录---------------------- ...

  9. BZOJ 1468: Tree

    Description 真·树,问距离不大于 \(k\) 的点对个数. Sol 点分治. 同上. Code /********************************************* ...

  10. Github Bash

    第一步生成密钥:ssh-keygen -C 'your@email.address' 第二步验证结果:ssh -T git@github.com 第三步克隆:git clone https://git ...