ZOJ 3537 Cake 求凸包 区间DP
题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价。现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价是多少。
思路:首先判断多边形是否是凸多边形,之后就是区间dp了。
求出凸包后,按逆时针来看。
设置dp[i][j]为从顶点i到顶点j所围成凸多边形的最优解。
枚举切点k (i < k < j)
dp[i][j] = min(dp[i][k] + dp[k][j] + cost[i][k] + cost[k][j]);
#include<bits/stdc++.h>
using namespace std;
const int MAXN = ;
struct point {
int x,y;
friend bool operator < (const point &a,const point &b) {
if (a.y == b.y) return a.x < b.x;
return a.y < b.y;
}
}src[MAXN];
int cost[MAXN][MAXN];
int N,P;
int dp[MAXN][MAXN]; point save[MAXN],tmp[MAXN];
int cross(point p0,point p1,point p2) {
return (p1.x - p0.x) * (p2.y - p0.y) - (p1.y - p0.y) * (p2.x - p0.x);
} int graphm(point * p,int n) {
sort(p,p + n);
save[] = p[];
save[] = p[];
int top = ;
for(int i = ; i < n ; i++){
while(top && cross(save[top],p[i],save[top-]) >= )top--;
save[++top] = p[i];
} int mid = top;
for(int i = n - ; i >= ; i--){
while(top > mid && cross(save[top],p[i],save[top-]) >= ) top--;
save[++top]=p[i];
}
return top;
} int getcost(point a,point b) {
return (abs(a.x + b.x) * abs(a.y+b.y)) % P;
} int main() {
while (scanf("%d%d",&N,&P) != EOF) {
for (int i = ; i < N ; i++) scanf("%d%d",&src[i].x,&src[i].y);
int num = graphm(src,N);
if (num < N) {
printf("I can't cut.\n");
}
else {
memset(cost,,sizeof(cost));
for (int i = ; i < N ; i++) {
for (int j = i + ; j < N ; j++) cost[i][j] = cost[j][i] = getcost(save[i],save[j]);
}
memset(dp,0x3f,sizeof(dp));
for (int i = ; i < N ; i++) dp[i][(i + ) % N] = ;
for (int d = ; d <= N ; d++) {
for (int i = ; i + d - < N ; i++) {
int j = d + i - ;
for (int k = i + ; k < j ; k++)
dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j] + cost[i][k] + cost[k][j]);
}
}
printf("%d\n",dp[][N - ]);
}
}
return ;
}
ZOJ 3537 Cake 求凸包 区间DP的更多相关文章
- ZOJ 3537 Cake(凸包+区间DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题目大意:给出一些点表示多边形顶点的位置,如果不是凸多边形 ...
- zoj 3537 Cake (凸包确定+间隔dp)
Cake Time Limit: 1 Second Memory Limit: 32768 KB You want to hold a party. Here's a polygon-sha ...
- Cake(凸包+区间DP)
You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut the cake into ...
- zoj 3537 Cake 区间DP (好题)
题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...
- 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 ...
- 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 ...
- zoj 3537 Cake(区间dp)
这道题目是经典的凸包的最优三角剖分,不过这个题目给的可能不是凸包,所以要提前判定一下是否为凸包,如果是凸包的话才能继续剖分,dp[i][j]表示已经排好序的凸包上的点i->j上被分割成一个个小三 ...
- 区间DP Zoj 3537 Cake 区间DP 最优三角形剖分
下面是别人的解题报告的链接,讲解很详细,要注意细节的处理...以及为什么可以这样做 http://blog.csdn.net/woshi250hua/article/details/7824433 我 ...
- ZOJ 3537 Cake (区间DP,三角形剖分)
题意: 给出平面直角坐标系上的n个点的坐标,表示一个多边形蛋糕,先判断是否是凸多边形,若否,输出"I can't cut.".若是,则对这个蛋糕进行3角形剖分,切n-3次变成n-2 ...
随机推荐
- table中的td限制宽度width也不能让字符过长变成省略号生效?
table中的td限制宽度width也不能让字符过长变成省略号生效? http://blog.csdn.net/java_mr_zheng/article/details/49423247 CSS t ...
- 【EF Core】Entity Framework Core 批处理语句
在Entity Framework Core (EF Core)有许多新的功能,最令人期待的功能之一就是批处理语句.那么批处理语句是什么呢?批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请 ...
- Luogu1041 NOIP2003传染病控制(搜索)
暴搜加个最优性剪枝即可.一直觉得正式比赛出这种不能一眼看出来暴搜就行了的搜索题的出题人都是毒瘤. #include<iostream> #include<cstdio> #in ...
- 【刷题】SPOJ 705 SUBST1 - New Distinct Substrings
Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...
- POJ3304:Segments——题解
http://poj.org/problem?id=3304 题目大意:给n条线段,求是否存在一条直线,将所有线段投影到上面,使得所有投影至少交于一点. ——————————————————————— ...
- 洛谷 P1108 低价购买 解题报告
P1108 低价购买 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买&quo ...
- zabbix问题汇总
1. ::110809.577 resuming IPMI checks on host [10.1.3.41]: connection restored :: seconds :: seconds ...
- cin.get()、流和缓冲区
大家好,这是我在CSDN的第一篇博客.我是一名学习GIS专业的大学生.我从小开始喜欢编程,可是到现在编程水平却长进不大,依然是菜鸟一个.究其原因,虽然这些年乱七八糟的东西学过不少,但是总的来说还是基础 ...
- bug级别分类
bug级别分类 2014-10-20 10:02 6403人阅读 评论(0) 收藏 举报 分类: SQA(17) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 由 ...
- html 5 新特性
现在html 5技术是最新的html标准,掌握html 5已经变得非常重要,以下是我查看相关资料后对html 5 的新特性的总结,方便大家对比学习.html 5的新特性1.取消了一些过时的html 4 ...