zoj 3537 Cake (凸包 最优三角剖分)
2017-03-19 18:53
232 查看
题目链接
这道题目是一道最优三角剖分的题目,其实也是一种区间dp里的一种应用,思路也很简单。这道题目还需要先判断是不是凸包,这里其实主要想记录一下凸包模板==
这道题目是一道最优三角剖分的题目,其实也是一种区间dp里的一种应用,思路也很简单。这道题目还需要先判断是不是凸包,这里其实主要想记录一下凸包模板==
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const double eps = 1e-6; const double pi = acos(-1.0); const int INF = 0x3f3f3f3f; const int MOD = 1000000007; #define ll long long #define CL(a) memset(a,0,sizeof(a)) #define sqr(a) ((a) * (a)) #define dis(a, b) sqrt(sqr(a.x - b.x) + sqr(a.y - b.y)) int n,m; int f[305][305],dp[305][305]; struct Point { int x,y; }; Point s[305],c[305]; int mult(Point p1,Point p2,Point p0)//叉积 { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool cmp(const Point& a,const Point &b) { if(a.y == b.y)return a.x < b.x; return a.y < b.y; } int Graham(Point *s, int n)//凸包 { int i; sort(s, s+n, cmp); c[0] = s[0]; c[1] = s[1]; int top = 1; for(i = 0; i < n; i++) { while(top && mult(c[top],s[i],c[top-1]) >= 0)top--; c[++top] = s[i]; } int mid = top; for(i = n - 2; i >= 0; i--) { while(top>mid && mult(c[top],s[i],c[top-1])>=0)top--; c[++top]=s[i]; } return top; } int calc(Point a, Point b)//费用 { return (abs(a.x + b.x) * abs(a.y+b.y)) % m; } int main () { while (scanf ("%d%d",&n,&m)==2) { for (int i=0; i<n; i++) scanf ("%d%d",&s[i].x,&s[i].y); if (Graham(s, n)<n)//求凸包 cout<<"I can't cut."<<endl; else { CL(f); for (int i=0; i<n; i++) { for (int j=i+2; j<n; j++) f[i][j] = f[j][i] = calc(c[i], c[j]); } memset(dp,0,sizeof(dp)); for(int len=3;len<n;len++) for(int i=0;i+len<n;i++) { int j=len+i; dp[i][j]=INF; for(int k=i+1;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+f[i][k]+f[k][j]); } cout<<dp[0][n-1]<<endl; } } return 0; }
相关文章推荐
- ZOJ - 3537 Cake (凸包+区间DP+最优三角剖分)
- ZOJ - 3537 Cake (凸包+区间DP+最优三角剖分)
- zoj 3537 Cake 【凸包 + 区间dp】 【最优三角剖分】
- ZOJ - 3735 Cake(凸包,区间dp,最优三角剖分)
- ZOJ-3537 Cake(区间dp+凸包最优三角形剖分)
- Cake - ZOJ 3537 凸包+dp三角划分
- Zoj 3537 Cake (DP_最优三角形剖分)
- zoj 3537 cake 切蛋糕 区间DP+凸包+递归 最优三角形剖分
- ZOJ - 3537 Cake 凸包+区间DP
- zoj 3537 Cake(区间DP+最优三角形剖分)待续
- zoj 3537 cake (区间DP+凸包+ 最优三角形剖分模型)
- ZOJ - 3537 Cake 凸包+区间DP
- ZOJ - 3537 Cake 凸包+区间DP
- ZOJ - 3537 Cake 凸包+区间DP
- Zoj 3537 Cake (DP最优三角形剖分)
- ZOJ - 3537 Cake 凸包+区间DP
- ZOJ 3735 Cake(区间DP,最优三角剖分)
- ZOJ - 3537 Cake 凸包+区间DP
- zoj 3537 Cake (区间DP x 最优三角形剖分)
- ZOJ - 3537 Cake 凸包+区间DP