`
阿尔萨斯
  • 浏览: 4505846 次
社区版块
存档分类
最新评论

Codeforces 437E The Child and Polygon(区间DP)

 
阅读更多

题目链接:Codeforces 437E The Child and Polygon

题目大意:给出一个多边形,问说有多少种分割方法,将多边形分割为多个三角形。

解题思路:首先要理解向量叉积的性质,一开始将给出的点转换成顺时针,然后用区间dp计算。dp[i][j]表示从点i到点j可以有dp[i][j]种切割方法。然后点i和点j是否可以做为切割线,要经过判断,即在i和j中选择的话点k的话,点k要在i,j的逆时针方。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;

const int N = 205;
const ll MOD = 1e9+7;

struct point {
    ll x, y;
    ll operator * (const point& c) const {
        return x * c.y - y * c.x;
    }
    point operator - (const point& c) const {
        point u;
        u.x = x - c.x;
        u.y = y - c.y;
        return u;
    }
}p[N];
int n;
ll dp[N][N];

void init () {
    scanf("%d", &n);
    memset(dp, -1, sizeof(dp));

    for (int i = 0; i < n; i++)
        scanf("%lld %lld", &p[i].x, &p[i].y);

    ll tmp = 0;
    p[n] = p[0];
    for (int i = 0; i < n; i++)
        tmp += p[i] * p[i+1];

    if (tmp < 0)
        reverse(p, p + n);
}

ll solve (int l, int r) {
    if (dp[l][r] != -1)
        return dp[l][r];

    ll& ans = dp[l][r];
    ans = 0;

    if (r - l == 1)
        return ans = 1;

    for (int i = l + 1; i < r; i++) {
        if ((p[l] - p[r]) * (p[i] - p[r]) > 0)
            ans = (ans + solve(l, i) * solve(i, r)) % MOD;
    }
    return ans;
}

int main () {
    init();
    printf("%lld\n", solve(0, n-1));
    return 0;
}
分享到:
评论

相关推荐

    CodeForces – 1312E Array Shrinking(区间dp)

    题目分析:最优性问题,且是对区间操作的,而且数据范围满足 n^3 的时间复杂度,综上可以考虑区间dp,因为题目已经明确了需要求什么,所以我们不妨设 dp[ i ][ j ] 为区间 [ i , j ] 合并后的最短数列的长度,因为...

    codeforces 19 E Fairy 解题报告

    Codeforces 19 E Fairy 是一道关于图论和二分图的编程竞赛题目。本题要求求解在给定的无向图中,通过删除一条边使得剩余的图成为一个二分图。首先,我们需要理解二分图的概念。二分图是指图中的节点可以分为两个互不...

    Codeforces 1312 E. Array Shrinking (区间dp)

    E. Array Shrinking time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output You are given an array a1,a2,…,an. You can perform the following operation...

    Codeforces 题库 101-200

    Codeforces题库101-200介绍了一个在编程竞赛领域非常知名的平台——Codeforces。Codeforces是一个专注于计算机编程的俄罗斯网站,由一组来自萨拉托夫国立大学的竞技体育团队成员领导,由Mikhail Mirzayanov领导。该...

    Codeforces 1083 A. The Fair Nut and the Best Path(树形DP)

    codeforces每日一练。 题意: 给一棵树,每个点有一个点权,每条边有一个边权,求一条链使得点权和-边权和最大。 思路: 由于我没看清楚题意,以为是求联通子图的点权和-边权和最大,用link-cut-tree写换根,wa10了两...

    Codeforces 题库 001-100

    标题 "Codeforces 题库 001-100" 暗示了这里讨论的是Codeforces网站上的前100个编程竞赛题目。Codeforces是一个专注于算法竞赛编程的俄罗斯网站,由来自萨拉托夫国立大学的一群体育爱好者组成,以Mikhail Mirzayanov...

    Codeforces 988 D. Points and Powers of Two(数学+结论)

    《Codeforces 988 D. Points and Powers of Two》是一道融合了数学与算法的编程竞赛题目。问题的核心在于找到一个数组中的子序列,使得其中任意两个元素之间的差值都是2的幂次。目标是找到这样的子序列,其长度尽...

    打codeforces的神器

    打codeforces的神器

    Codeforces 1105B - Zuhair and Strings 测试点37个(全) .doc

    这个问题是关于Codeforces平台上的一道编程竞赛题目,编号为1105B,名为"Zuhair and Strings"。从给出的部分内容来看,这是一道处理字符串并计算满足特定条件的子串数量的问题。测试点提供了多个输入和输出示例,...

    codeforces enhancer 1.1.2

    Codeforces Enhancer 1.1.2是一款专为Google Chrome浏览器设计的插件,旨在提升用户在Codeforces编程竞赛平台上的体验。这个插件的主要目标是通过提供一系列实用功能,帮助程序员更有效地进行代码编写、测试和提交,...

    codeforces编程网站预测分数插件.zip

    Codeforces是一个广受欢迎的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)社区中备受推崇。这个“codeforces编程网站预测分数插件.zip”文件似乎包含了一个专为Codeforces用户设计的插件,旨在帮助参赛者...

    Codeforces 1333C. Eugene and an array(思维) /详解

    考虑用dp[x]dp[x]dp[x]记录前缀和为xxx的区间右端点。 那么这道题其实可以看成用map记录前缀和的路径,依次计算每个元素作为区间右端点并且满足条件时对答案的贡献,再进行累加即可。 iii是以a[i]a[i]a[i]为右端点的...

    Codeforces题目泛做解题报告许昊然.pdf

    Codeforces 23E - Tree **题目描述**:与树相关的数据结构问题。 **解题思路**:树是一种常用的数据结构,可以用来表示层次关系。这类问题的解决思路通常涉及到树的遍历、深度优先搜索(DFS)或广度优先搜索(BFS)等...

    CodeForces – 1305D Kuroni and the Celebration(思维,互动题)

    题目大意:给出一个由 n 个点组成的树,现在可以询问 n/2 次(向下取整)LCA,确定根节点是哪个节点 题目分析:因为最多只能求 n/2 次lca,每次需要两个节点作为参数,也就是说每个点我们至多遍历一遍,读完题后没什么...

    Codeforces 1305 D. Kuroni and the Celebration (交互题)

    题意: 给出 nnn 个点,n−1n-1n−1 条边,最多询问 n2\frac{n}{2}2n​ 次,每次询问 u,vu,vu,v,会给出 uvuvuv的最近公共祖先,求树的根。 ...操作就是一个删除叶子节点的过程。 AC代码: const int N = 1010;...

    linkfqy#CSDN_blog_backup#【贪心+线段树】Codeforces 557C Arthur and Tabl

    暴枚最长桌脚的长度$l$,然后长度比$l$长的桌脚全部都要砍掉长度比$l$短的桌脚选择代价前$k$小的砍掉用线段树维护;示例程序 :typedef long l

    Codeforces codes_names_Codeforces_

    描述中的“Some of the Codeforces problems codes”进一步确认了我们将分析的是Codeforces平台上的部分问题代码。 在编程竞赛中,每个问题都有一个唯一的ID,通常由字母和数字组成,如“1358B”,“1358A”等。...

    Codeforces global round 10_Codeforces_

    Codeforces全球第十轮比赛是编程竞赛平台Codeforces举办的一场线上编程比赛,旨在挑战参赛者的算法设计、逻辑思维和编程技巧。在这个比赛中,参赛者通常需要解决一系列算法问题,涵盖数据结构、图论、动态规划、数学...

    Codeforces 185A - Plant 全测试点49个

    Codeforces 185A - Plant 全测试点49个 Codeforces 是一个在线编程平台,提供了大量的编程题目和比赛。其中,185A - Plant 是一个经典的题目,要求编写一个程序来解决植物生长的问题。 在这个题目中,输入是一个...

    CodeForces – 1300E Water Balance(贪心)

    题目大意:给出 n 个数字组成的序列,现在可以对数列进行多次操作,每次操作可以选择其中一段连续的数列,用其平均数替换原位置,换句话说,若原连续数列为 1 2 3,则可以替换为 2 2 2,问如何操作可以使得最后答案...

Global site tag (gtag.js) - Google Analytics