Code Chef MINPOLY(计算几何+dp)
题面
题解
我们枚举这个凸多边形\(y\)坐标最小的点\(p_i\),然后对于所有\(y\)坐标大于等于它的点极角排序
我们预处理出\(s_{j,k}\)表示三角形\(p_i,p_j,p_k\)内部的点的\(b\)总和(不包括边界),然后记\(dp_{i,j,k}\)表示这个凸多边形之前两个点是\(p_i,p_j\),还需要\(k\)个点,最小的\(b\)是多少,然后可以直接记忆化搜索
//minamoto
#include<bits/stdc++.h>
#define R register
#define inline __attribute__((always_inline))
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
const int N=55,inf=0x3f3f3f3f;
typedef long long ll;
struct Point{
int x,y,v;
inline Point(){}
inline Point(R int xx,R int yy,R int vv):x(xx),y(yy),v(vv){}
inline Point operator +(const Point &b)const{return Point(x+b.x,y+b.y,v);}
inline Point operator -(const Point &b)const{return Point(x-b.x,y-b.y,v);}
inline ll operator *(const Point &b)const{return 1ll*x*b.y-1ll*y*b.x;}
inline ll norm(){return 1ll*x*x+1ll*y*y;}
}p[N],c;
inline bool Right(const Point &a,const Point &b,const Point &c){return (c-a)*(b-a)>0;}
inline bool in(const Point &a,const Point &b,const Point &c,const Point &d){
return Right(a,d,b)&&Right(b,d,c)&&Right(c,d,a);
}
inline bool cmpy(const Point &a,const Point &b){return a.y>b.y||(a.y==b.y&&a.x>b.x);}
inline bool cmpp(const Point &a,const Point &b){
R ll k=(a-c)*(b-c);
return k?k<0:(a-c).norm()<(b-c).norm();
}
int f[N][N][N],s[N][N],ans[N],n,ed,ttt;
int solve(int las,int now,int cnt){
if(!cnt)return 0;if(~f[las][now][cnt])return f[las][now][cnt];
int res=inf;
fp(i,now+1,ttt-1)if(Right(p[now],p[i],p[las]))cmin(res,solve(now,i,cnt-1)+p[i].v+s[now][i]);
return f[las][now][cnt]=res;
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d",&n);
fp(i,1,n)scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].v),ans[i]=inf;
sort(p+1,p+1+n,cmpy);
fd(t,n,1){
memset(f,-1,sizeof(f));
c=p[t],sort(p+1,p+t,cmpp),ttt=t;
fp(i,1,t-1)fp(j,i+1,t-1){
s[i][j]=0;
fp(k,i+1,j-1)if(in(c,p[j],p[i],p[k])||(p[k]-c)*(p[j]-c)==0)s[i][j]+=p[k].v;
}
for(R int i=1,v=0;i<t;++i){
v=((p[i]-c)*(p[i-1]-c)==0?v:0)+p[i].v;
fp(cnt,3,t)cmin(ans[cnt],c.v+v+solve(t,i,cnt-2));
}
sort(p+1,p+t,cmpy);
}
fp(i,3,n)printf("%d%c",ans[i]>1e7?-1:ans[i]," \n"[i==n]);
return 0;
}
Code Chef MINPOLY(计算几何+dp)的更多相关文章
- sdut 2153:Clockwise(第一届山东省省赛原题,计算几何+DP)
Clockwise Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Saya have a long necklace with ...
- Code Chef DARTSEGM(计算几何+凸包)
题面 传送门 题解 好眼熟丫-- 一月月赛最后一题--,代码都不用改-- //minamoto #include<bits/stdc++.h> #define R register #de ...
- Code Chef IMPO(计算几何+扫描线+积分)
题面 传送门 前置芝士 扫描线,积分求面积 题解 我怎么老是忘了积分可以求面积-- 首先,这两个投影的最小的\(x\)坐标和最大的\(x\)坐标必须相等,否则肯定无解 我们考虑一种方法,枚举\(x\) ...
- ZOJ 3494 BCD Code(AC自动机+数位DP)
BCD Code Time Limit: 5 Seconds Memory Limit: 65536 KB Binary-coded decimal (BCD) is an encoding ...
- POJ3178 计算几何+DP
//一些点一些圆,过圆不能连线,相邻点不能连线,问最多连几条线 //计算几何模板+区间dp //关键是判断圆和线段是否相交 #include <cstdio> #include <c ...
- 『HGOI 20190917』Cruise 题解 (计算几何+DP)
题目概述 在平面直角坐标系的第$1$象限和第$4$象限有$n$个点,其中第$i$个点的坐标为$(x_i,y_i)$,有一个权值$p_i$ 从原点$O(0,0)$出发,不重复的经过一些点,最终走到原点, ...
- zoj3494 BCD Code(AC自动机+数位dp)
Binary-coded decimal (BCD) is an encoding for decimal numbers in which each digit is represented by ...
- zoj3494BCD Code(ac自动机+数位dp)
l链接 这题想了好一会呢..刚开始想错了,以为用自动机预处理出k长度可以包含的合法的数的个数,然后再数位dp一下就行了,写到一半发现不对,还要处理当前走的时候是不是为合法的,这一点无法移到trie树上 ...
- 【Code Chef】April Challenge 2019
Subtree Removal 很显然不可能选择砍掉一对有祖先关系的子树.令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$:如果$i$被砍, ...
随机推荐
- clion配置c/c++环境
打开这个界面 点击添加Cygwin选择下载的Cygwin在进行下面的配置 去网站https://www.cygwin.com/选择路径即可(这里只写了配置过程中的关键步骤并且附上IDE的链接直接安装 ...
- 43.Charles抓包(iOS的http/https请求)
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles: https://www.charlesproxy.com/download/ 2. H ...
- Hadoop3集群搭建之——hive添加自定义函数UDF
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...
- 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)
传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...
- Devops 到底是什么?(转)
出处:https://www.cnblogs.com/servicehot/p/6510199.html 过去一年以来,一批来自欧美的.不墨守陈规的系统管理员和开发人员一直在谈论一个新概念:DevOp ...
- (12)We should aim for perfection — and stop fearing failure
https://www.ted.com/talks/jon_bowers_we_should_aim_for_perfection_and_stop_fearing_failure/transcrip ...
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)
https://codeforces.com/contest/1072/problem/D 题意 给你一个n*n充满小写字母的矩阵,你可以更改任意k个格子的字符,然后输出字典序最小的从[1,1]到[n ...
- dj forms表单组件
手动的一个个去校验前端传过来的字段数据,是很麻烦的,利用django 的forms组件,对需要校验的字段定义好,能够大大提高效率. 校验字段功能 from django.db import model ...
- IntelliJ IDEA 2017版 编译器使用学习笔记(十) (图文详尽版);IDE快捷键使用;IDE关联一切
关联一切 一.与spring关联 通过图标跳转相关联的类 设置关联:进入project structure ===>facets =>选加号,===>选spring,默认添 ...
- R语言的文件写入
R语言的文件写入 官方文档介绍如下: write.table(x, file = "", append = FALSE, quote = TRUE, sep = " &q ...