ZOJ 3537 (凸包 + 区间DP)(UNFINISHED)
#include "Head.cpp"
const int N = 10007;
int n, m;
struct Point{
int x,y;
bool operator < (const Point &com) const{
if(y != com.y) return y < com.y;
return x < com.x;
}
}a[N];
int cost[N][N];
int f[N][N];
Point sta[407],tmp[407];
int top;
inline int cross(Point a,Point b,Point c){
return (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x);
}
inline int Graham(Point *a, int n){
sort(a, a + n);
sta[0] = a[0], sta[1] = a[1];
top = 1;
R(i, 0, n - 1){
while(top && cross(sta[top], a[i], sta[top - 1]) >= 0) --top;
sta[++top] = a[i];
}
int mid = top;
nR(i,n - 2, 0){
while(top > mid && cross(sta[top], a[i], sta[top - 1]) >= 0) --top;
sta[++top] = a[i];
}
return top;
}
int Calc(Point a,Point b) {
return abs((a.x + b.x) * (a.y+b.y)) % m;
}
int main(){
FileOpen();
while(scanf("%d%d", &n, &m) != EOF) {
R(i,0, n - 1){
io >> a[i].x >> a[i].y;
}
int tot = Graham(a,n);
if(tot < n) {
printf("I can't cut.\n");
continue;
}
Fill(cost, 0);
R(i,0,n - 1)
R(j,i + 2, n - 1){
cost[i][j] = cost[j][i] = Calc(sta[i], sta[j]);
}
R(i,0, n - 1){
R(j,0, n - 1){
f[i][j] = 0x7fffffff;
}
f[i][(i + 1) % n] = 0;
}
nR(i,n-3,0)
R(j,i + 2, n -1)
R(k, i + 1, j - 1){
f[i][j] = Min(f[i][j], f[i][k] + f[k][j] + cost[i][k] + cost[k][j]);
}
printf("%d\n", f[0][n-1]);
}
return 0;
}
段错误什么鬼
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long
#define ON_DEBUG
#ifdef ON_DEBUG
#define D_e_Line printf("\n\n----------\n\n")
#define D_e(x) cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);
#else
#define D_e_Line ;
#define D_e(x) ;
#define Pause() ;
#define FileOpen() ;
#endif
struct ios{
template<typename ATP>ios& operator >> (ATP &x){
x = 0; int f = 1; char c;
for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();
x*= f;
return *this;
}
}io;
using namespace std;
const int N = 10007;
int n, m;
struct Point{
int x,y;
bool operator < (const Point &com) const{
if(y != com.y) return y < com.y;
return x < com.x;
}
}a[N];
int cost[N][N];
int f[N][N];
Point sta[407],tmp[407];
int top;
inline int cross(Point a,Point b,Point c){
return (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x);
}
inline int Graham(Point *a, int n){
sort(a + 1, a + n + 1);
sta[0] = a[1], sta[1] = a[2];
top = 1;
R(i, 1, n){
while(top && cross(sta[top], a[i], sta[top - 1]) >= 0) --top;
sta[++top] = a[i];
}
int mid = top;
nR(i,n - 1, 1){
while(top > mid && cross(sta[top], a[i], sta[top - 1]) >= 0) --top;
sta[++top] = a[i];
}
return top;
}
int Calc(Point a,Point b) {
return abs((a.x + b.x) * (a.y+b.y)) % m;
}
int main(){
//FileOpen();
while(scanf("%d%d", &n, &m) != EOF) {
R(i,1,n){
io >> a[i].x >> a[i].y;
}
int tot = Graham(a, n);
if(tot < n) {
printf("I can't cut.\n");
continue;
}
Fill(cost, 0);
R(i,1,n)
R(j,i + 2, n){
cost[i][j] = cost[j][i] = Calc(sta[i], sta[j]);
}
R(i,1,n){
R(j,1,n){
f[i][j] = 0x3f3f3f3f;
}
f[i][i % n + 1] = 0;
}
nR(i,n - 2,1){
R(j,i + 2, n){
R(k, i + 1, j - 1){
f[i][j] = Min(f[i][j], f[i][k] + f[k][j] + cost[i][k] + cost[k][j]);
}
}
}
printf("%d\n", f[1][n]);
}
return 0;
}

ZOJ 3537 (凸包 + 区间DP)(UNFINISHED)的更多相关文章
- zoj 3537 Cake 区间DP (好题)
题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...
- 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)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题目大意:给出一些点表示多边形顶点的位置,如果不是凸多边形 ...
- ZOJ 3537 Cake 求凸包 区间DP
题意:给出一些点表示多边形顶点的位置(如果多边形是凹多边形就不能切),切多边形时每次只能在顶点和顶点间切,每切一次都有相应的代价.现在已经给出计算代价的公式,问把多边形切成最多个不相交三角形的最小代价 ...
- HDU 6603 Azshara's deep sea(凸包+区间DP)
由于题目要求,首先维护出一个凸包,然后在凸包上寻找点对关系,用rel[i][j]表示i点和j点之间是否可以连线,又由于维护出来的凸包上的点的个数不多,可以直接枚举点对并枚举所有圆,判断两点直线和圆是否 ...
- ZOJ 3469Food Delivery(区间DP)
Food Delivery Time Limit: 2 Seconds Memory Limit: 65536 KB When we are focusing on solving prob ...
- 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 ...
- 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 ...
随机推荐
- spring-boot @Async注解 解决异步多线程入库的问题
前言在开发过程中,我们会遇到很多使用线程池的业务场景,例如定时任务使用的就是ScheduledThreadPoolExecutor.而有些时候使用线程池的场景就是会将一些可以进行异步操作的业务放在线程 ...
- IIS7 网站发布常见报错问题解决方案汇总
本文实例为大家分享了IIS7 网站发布常见问题,以及五种问题的解决方法,供大家参考,具体内容如下: 1.不是有效的Win32位应用程序 : 解决方案: 1).进入应用程序池=>选中网站=> ...
- 参与 2022 第二季度 Flutter 开发者调查
2022 Google I/O 大会正式落下帷幕,Flutter 作为 14 个开发者产品和平台中的一款,吸引了来自全球的很多开发者们的关注.随着全国很多地方已经进入夏季,Flutter 今年第二季度 ...
- consul系列文章02---替换掉.netcore的配置文件
如果是开发微服务的项目,多个服务的配置管理起来比较麻烦,需要集中管理,也就是需要有配置中心: consul集成配置中心的思路:读取配置文件时不在从本地的应用中读取,而是从consul的KEY/valu ...
- springcloud 断路器
https://www.jb51.net/article/138572.htm 参考资料: http://www.cnblogs.com/ulysses-you/p/7281662.html http ...
- 接口测试postman深度挖掘应用②
上一篇文章我们已经介绍了postman的基本用法,以及接口测试原理.未关注博主的可以关注下博主,后期测试安全,以及各种工具用法,编程语言都会有讲解的 老样子:①先补习基础知识: ②补充上一章节由于过 ...
- 『忘了再学』Shell基础 — 29、AWK内置变量
目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...
- bootstrap 4.0 dropdown 找不到popper.js 的解决方案
最近项目中升级bootstrap 由3.3.7版 升了4.0版本 发现 dropdown 找不到popper.js 解决办法:npm install -save popper 下载完之后,查看node ...
- 使用PowerShell安装MySQL
更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年7月10日. 2022年4月16日:更新MySQL下载链接. 一.说明与准备工作 根据MySQL官网提供的安装M ...
- Java多线程下载分析
为什么要多线程下载 俗话说要以终为始,那么我们首先要明确多线程下载的目标是什么,不外乎是为了更快的下载文件.那么问题来了,多线程下载文件相比于单线程是不是更快? 对于这个问题可以看下图. 横坐标是线程 ...