题意给2n个点,问把他们两两连接有多少种方案,线段不允许交叉。

哎,感觉我好水。。。打了两天CF,但是笔记本掉帧太厉害,没兴致玩了。明天来鸡房呆着敲代码吧。。。

假设有p个点,当然题目给了n表达的是2n,所以p一定是偶数。顺序标号后发现,只需要考虑第一个点和谁连接就好了,因为有个线段不能相交的条件,所以一旦确定了第一个点连出的线段,这p个点就被这线段分成了两部分。很容易知道每部分的点数必须为偶数,否则一定产生交点。那么就很简单了,只需要考虑第一个点和第2,4,6,8,...,p连接的情况就可以了,定义dp[i]表示i个点的方案数,那么:

dp[i] = dp[i-2] + dp[2]*dp[i-4] + dp[4]*dp[i-6] + ... + dp[n-2]

为了表达方便,初始化dp[0]为1,那么上述转移就是:dp[i] = dp[j]*dp[i-2-j] (j=0,2,4,...,i-2)

C++代码:

#include<cstdio>typedef long long ll;
const int MAX = 202;
ll dp[MAX] = {1, 0, 1};int main() {for (int i = 4; i < MAX; i += 2) {for (int j = 2; j <= i; j += 2) {dp[i] += dp[i-j] * dp[j-2];}}int n;while (~scanf(" %d", &n) && (~n)) {printf("%lld\n", dp[n<<1]);}return 0;
}

当然,这是很糟糕的代码:点数达到一定量后溢出long long了,所以还是大整数(Java版):

import java.util.*;
import java.math.*;public class Main {public static void main(String args[]) {BigInteger []dp = new BigInteger[202];dp[0] = BigInteger.valueOf(1);dp[2] = BigInteger.valueOf(1);for (int i = 4; i < 202; i += 2) {dp[i] = BigInteger.ZERO;for (int j = 2; j <= i; j += 2) {dp[i] = dp[i].add(dp[i-j].multiply(dp[j-2]));//System.out.println("dp[" + i + "] = " + dp[i]);}}Scanner cin = new Scanner(System.in);int n;while (cin.hasNextInt()) {n = cin.nextInt();if (n == -1) break;System.out.println(dp[n<<1]);}}
}

好吧,我狠无聊,好想打字...只是缓解一下两天没有敲代码的手瘾...吃翔去了╮(╯▽╰)╭

[简单dp]toj1179相关推荐

  1. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  2. hdu2067 简单dp或者记忆化搜索

    题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. POJ1088:滑雪(简单dp)

    题目链接:  http://poj.org/problem?id=1088 题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.求可以滑落的最长长度. 题目解析: 首先要先排一 ...

  4. 第三讲 数学与简单DP【完结】

    目录 1205. 买不到的数目 [数学结论题] 1211. 蚂蚁感冒 [模拟 / 推理] 1216. 饮料换购 [简单 / 模拟] 2. 01背包问题 [板子题] 1015. 摘花生 [简单DP] 8 ...

  5. hdu 2881(简单dp)

     题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...

  6. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  7. 最少拦截系统,简单dp,(学长说这是贪心?!。。。。。。也是醉了)

     description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天, ...

  8. HDU 1158【简单dp】

    题意:给你一个项目,需要几个月来完成买,同时也给你每个月最少需要的工人数.并且告诉你hiring,firing每个工人的钱数,以及每个月应付每个工人的工资.求项目完成时最小花费. 这是个简单dp,思路 ...

  9. 4.15 每周作业 —— 简单DP

    免费馅饼 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

  10. HDU 5375 Gray code (简单dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Ot ...

最新文章

  1. [译]使用scikit-learn进行机器学习的简介(教程1)
  2. Python 求最大子集的递归实现
  3. MySQL从入门到精通50讲(十一)-MySQL正则表达式及事务
  4. axis调用webservice客户端开发
  5. mysql 排版 指令_Mysql语句排版
  6. 转发程序无法决定链接类型
  7. 正则表达式JavaScript版本回顾笔记背诵版本
  8. python中碰撞的代码_Python…Tkinter碰撞
  9. 7-Python3 注释
  10. JAVA 如何将String进行大小写转换
  11. 面对众多客户/用户需求,每个都紧急,怎么排期?
  12. 如何批量压缩pdf文件大小?
  13. 你真的了解VRP操作系统吗?华为网络设备的文件系统、设备基础管理、命令行基础一次学会
  14. ORA-20011: Approximate NDV failed: ORA-06564: object EXPDDDP does not exist
  15. wpf研究之道-grid控件
  16. phonegap 微信登录总结
  17. 阿里巴巴获得商品详情 API 返回值说明
  18. Windows 批处理(bat) if条件判断语句使用教程
  19. 自定义控件从入门到轻生之---初尝禁果
  20. 收支科目不为零_期间损益结转余额为零能结账吗

热门文章

  1. java 字符单词匹配_如何使用Java RegEx匹配单词字符?
  2. (2)Linux环境下安装和使用Redis
  3. (1)快速了解Redis
  4. 小程序快速入门:wxss的使用
  5. 十四、JS同步异步知识点,重点(Node.js-fs模块补充篇)
  6. jquery 省市区联动插件
  7. Spring框架之控制反转和依赖注入
  8. 主题:小菜一碟可以怎样说
  9. MySQL中修改root密码的方法
  10. shell 执行多个python脚本