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$被砍, ...
随机推荐
- AJAX-URL-HTTP协议-缓存-DOM操作-HTML元素事件
1.URL 1.URL的作用 用于来表示任意一个资源的位置(互联网上). 协议+主机名+文件目录结构+文件名称 2.详解 格式: <scheme>://<user>:<p ...
- Keras框架下使用CNN进行CIFAR-10的识别测试
有手册,然后代码不知道看一下:https://keras-cn.readthedocs.io/en/latest/ 首先是下载数据集,下载太慢了就从网盘上下载: 链接:https://pan.baid ...
- ubuntu禁用n卡驱动(进系统卡死)
显卡驱动 该发行版依旧内置了Nouveau 开源驱动,这是导致频繁死机的直接原因.接下来要做的三件事情是: 禁用Nouveau 内核模块 安装Intel HD 530 驱动(二选一) 安装NVIDIA ...
- mac os 下 Android Studio设置真机调试
http://www.cnblogs.com/developer-wang/p/6719555.html 如果没有 .bash_profile 只需要创建 .bash_profile,然后增加andr ...
- Win7 VS2015环境编译Libpng
第3次编译Libpng依然想不起任何东西,为了不浪费第4次的时间... http://libpng.com/pub/png/libpng.html http://www.zlib.net/ 解压两个压 ...
- myeclipse安装svn方法汇总
myeclipse安装svn方法汇总 博客分类: eclipse MyEclipse6.5安装SVN插件,掌握了几种方法,本节就像大家介绍一下MyEclipse6.5安装SVN插件的三种方法,看完 ...
- 自定义消息的操作方法ON_MESSAGE(..)
- Docker mysql 主从
一.独立容器部署mysql主从 # 主从 my.cnf加上 [mysqld] server-id = XXX log-bin = mysql-bin log-bin-index = log-bin.i ...
- CSS Transform Style
As CSS3 developing quickly, the transform style can be written conviently. I find that it is an inte ...
- Libre Office冻结操作-MAC
冻结行/列 选中所要冻结的行/列,选择window-Freeze 冻结成功 冻结单元格 操作方法与“冻结行/列”一致