下面是别人的解题报告的链接,讲解很详细,要注意细节的处理。。。以及为什么可以这样做

http://blog.csdn.net/woshi250hua/article/details/7824433

我的代码:

 //其中求凸包用的是Andrew扫描算法,复杂度主要为排序O(n*logn),扫描为O(n)
#include <cstdio>
#include <algorithm>
#define INF 100000000
#define min(a,b) a<b?a:b;
using namespace std;
//点的定义
struct point
{
int x,y;
bool operator <(const point & other) const
{
if(x == other.x) return y < other.y;
return x < other.x;
};
} convex[];
//判断是往左还是往右
bool checkDir(point p0,point p1,point p2)
{
//往左返回true
if((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y) * (p2.x-p0.x) <= )
return true;
else return false;
}
//求凸包的算法···,返回凸包的顶点数,输入的顶点数>=3。0,1,2特判,如果有需要的话
int andrew(point p[],int n)
{
sort(p,p+n);
int m=;
for(int i=; i<n; ++i)
{
while(m > && checkDir(convex[m-],convex[m-],p[i]) ) --m;
convex[m++] = p[i];
}
int k =m;
for(int i=n-; i>=; --i)
{
while(m > k && checkDir(convex[m-],convex[m-],p[i]) ) --m;
convex[m++] = p[i];
}
return m-;
}
int main()
{
// freopen("in.cpp","r",stdin);
int n,m,dp[][],cost[][];
struct point p[];
while(scanf("%d%d",&n,&m) != EOF)
{
//读入数据
for(int i=; i<n; ++i)
scanf("%d%d",&p[i].x,&p[i].y);
int num = andrew(p,n);
if(num != n)
{
printf("I can't cut.\n");
continue;
}
//预处理dp数组的值
for(int i=; i<n; ++i)
{
for(int j=; j<n; ++j)
dp[i][j] = INF;
dp[i][(i+)%n] = ;
}
//预处理cost数组的值
for(int i=; i<n; ++i)
{
cost[i][i+] = cost[i+][i] = ;
cost[i][i] =;
}
for(int i=; i<n; ++i)
for(int j=i+; j<n; ++j)
cost[j][i] = cost[i][j] = abs(convex[i].x + convex[j].x) * abs(convex[i].y+convex[j].y)%m;
//DP
for(int i=n-; i>=; --i)
for(int j=i+; j<n; ++j)
for(int k=i+; k < j; ++k)
dp[i][j] = min(dp[i][j],dp[i][k]+dp[k][j]+cost[k][i]+cost[k][j]);
printf("%d\n",dp[][n-]);
}
return ;
}

区间DP Zoj 3537 Cake 区间DP 最优三角形剖分的更多相关文章

  1. zoj 3537 Cake 区间DP (好题)

    题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...

  2. zoj 3537 Cake(区间dp)

    这道题目是经典的凸包的最优三角剖分,不过这个题目给的可能不是凸包,所以要提前判定一下是否为凸包,如果是凸包的话才能继续剖分,dp[i][j]表示已经排好序的凸包上的点i->j上被分割成一个个小三 ...

  3. ZOJ 3537 Cake (区间DP,三角形剖分)

    题意: 给出平面直角坐标系上的n个点的坐标,表示一个多边形蛋糕,先判断是否是凸多边形,若否,输出"I can't cut.".若是,则对这个蛋糕进行3角形剖分,切n-3次变成n-2 ...

  4. zoj 3537 Cake (凸包确定+间隔dp)

    Cake Time Limit: 1 Second      Memory Limit: 32768 KB You want to hold a party. Here's a polygon-sha ...

  5. ZOJ 3537 Cake(凸包+区间DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题目大意:给出一些点表示多边形顶点的位置,如果不是凸多边形 ...

  6. ZOJ 3537 Cake(凸包判定+区间DP)

    Cake Time Limit: 1 Second Memory Limit: 32768 KB You want to hold a party. Here's a polygon-shaped c ...

  7. ZOJ 3537 Cake 求凸包 区间DP

    题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价.现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价 ...

  8. ZOJ - 3537 Cake (凸包+区间DP+最优三角剖分)

    Description You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut t ...

  9. ZOJ 3905 Cake(贪心+dp)

    动态规划题:dp[i][j]表示有i个Cake,给了Alice j个,先按照b排序,这样的话,能保证每次都能成功给Alice Cake,因为b从大到小排序,所以Alice选了j个之后,Bob最少选了j ...

随机推荐

  1. Codeforces 496D - Tennis Game

    496D - Tennis Game 思路:枚举每个t,求出对应的满足条件的s. 代码: #include<bits/stdc++.h> using namespace std; #def ...

  2. English Words Type

    经常见到的: v = 动词,兼指及物动词和不及物动词,verb的缩写 n = 名词,noun的缩写 adj = 形容词, adjective的缩写 adv.表示副词, adverb的缩写 prep.表 ...

  3. iptable 大量需要封杀的ip地址便捷方法

    xu言: 最近家里出了点事,一直没有坚持写blog.感觉还有好一堆事等着我做呢.毕竟人生苦短,及时"行乐". 今天看到我的一个iptable的草稿,赶紧搬上来.以免日后忘记. 有些 ...

  4. spfa毒瘤算法

    终于知道怎么卡spfa(不优化)这一毒瘤算法了 下面就是造数据代码,点数才1e5,边数379980 随便测了一组数据: count: 831841219(入队次数) 68917.096 ms(足够t到 ...

  5. TCP文件发送

    发送端(客户端) #include <iostream> #include <winsock2.h> #include <Ws2tcpip.h> #include ...

  6. 点击input文字会自动消失

    <input type="text" name="q" value="请输入关键字" style="width:128px; ...

  7. 我所理解的event loop

    灵魂三问 JS为什么是单线程的 我们都知道,JS是单线程的语言,那为什么呢?我的理解是JS设计之初就是为了在浏览器端完成DOM操作和一些简单交互的,既然涉及到DOM操作如果是多线程就会带来复杂的同步问 ...

  8. python读写csv时中文乱码问题解决办法

    https://www.cnblogs.com/shengulong/p/7097869.html 参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写, ...

  9. duilib 实现 XML重用(item完全重合的CList)

    最近做一个项目,界面库用的是duilib. 软件首页的左侧是一个机型列表,右侧是机型信息及其他信息,点击左侧的机型,右边跟着变为对应的信息. 由于右侧信息比较复杂,还有进度条什么的,所以如果右侧只用一 ...

  10. angular封装jquery插件(组件)

    http://www.phloxblog.in/jquery-plugin-angular-js-directive-clean-html-approach/#.VaCWL9yUemJ