hdu6365 2018 Multi-University Training Contest 6 1004 Shoot Game
http://acm.hdu.edu.cn/showproblem.php?pid=6365
细节处理
- unique返回的是最后一位的后一位,因此从1开始的数组要减去(p+1)
- 结构体可以用unqiue和lower_bound,因此结构体也可以离散化
- 此处的斜率是x/y,因为这样定义斜率会随着x的增大而增大
思路
- 一开始见到这道题,因为是个计算几何题,但是转换的思路十分巧妙:
- 首先如何处理一条线段,假设我们穿过所有点的两个端点,一定可以穿过所有线段,所以每条线段转化为两个点
- 那么如何处理每个点(x,y),因为假如斜率相同的点,都能被一条射线穿过,因此实际上衡量每个点的标准应该是他的斜率,因此将每个点转化为他的斜率
- 根据斜率将点排序,以两点之间为区间进行区间dp,每次找区间内价值最大的一条线进行区间的分割,这样只有完全包含在枚举区间内的直线才能有贡献(即假如在穿过当前直线时同时穿过的其他直线永远也不会有贡献了)
- 定义dp[i][j]为穿过包含在(i,j)区间所有直线所需要的最小代价(即穿过(i,j)区间但并不在i,j区间内的直线可能会被穿过,但是贡献在之前已经被计算了)
转移方程为
dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+w[k]);
#include<bits/stdc++.h>
#define M 305
#define ll long long
#define inf 1e16
using namespace std;
int n,i,T,sz;
ll h[M<<1],w[M<<1],l[M<<1],r[M<<1],dp[M<<1][M<<1];
struct N{
ll x,y;
N(){}
N(ll x,ll y): x(x),y(y){}
bool operator ==(const N& rhp)const{
return x*rhp.y-y*rhp.x==0;
}
bool operator<(const N& rhp)const{
return x*rhp.y-y*rhp.x<0;
}
}p[M<<1];
int id(N a){ return lower_bound(p+1,p+1+sz,a)-p;}
ll dfs(int L,int R){
ll &ans=dp[L][R];
if(L>R)return 0;
if(ans!=-1)return ans;
ans=0;
ll ma=-1,x;
for(int i=1;i<=n;i++){
if(L<=l[i]&&r[i]<=R){
if(w[i]>ma){
ma=w[i];x=i;
}
}
}
if(ma==-1)return ans;
ans=inf;
for(int i=l[x];i<=r[x];i++){
ans=min(ans,dfs(L,i-1)+dfs(i+1,R)+ma);
}
return ans;
}
int main(){
scanf("%d",&T);
while(T--){
memset(dp,-1,sizeof(dp));
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%lld%lld%lld%lld",&h[i],&l[i],&r[i],&w[i]);
p[2*i-1]=N(l[i],h[i]);
p[2*i]=N(r[i],h[i]);
}
sort(p+1,p+1+2*n);
sz=unique(p+1,p+2*n+1)-p-1;
for(i=1;i<=n;i++){
l[i]=id(N(l[i],h[i]));
r[i]=id(N(r[i],h[i]));
}
printf("%lld\n",dfs(1,sz));
}
}
hdu6365 2018 Multi-University Training Contest 6 1004 Shoot Game的更多相关文章
- hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 6312.Game-博弈-签到题 (2018 Multi-University Training Contest 2 1004)
2018 Multi-University Training Contest 2 6312.Game 博弈,直接官方题解,懒了. 考虑将游戏变成初始时只有2~n,如果先手必胜的话,那么先手第一步按这样 ...
- HDU 6335.Problem D. Nothing is Impossible-思维题 (2018 Multi-University Training Contest 4 1004)
6335.Problem D. Nothing is Impossible 题意:给你n道题目,m个人,每题有x个正确选项,y个错误选项,问你做对题数量最多的人做对了多少道题目. 如果一道题有y个错误 ...
- HDU 6322.Problem D. Euler Function -欧拉函数水题(假的数论题 ̄▽ ̄) (2018 Multi-University Training Contest 3 1004)
6322.Problem D. Euler Function 题意就是找欧拉函数为合数的第n个数是什么. 欧拉函数从1到50打个表,发现规律,然后勇敢的水一下就过了. 官方题解: 代码: //1004 ...
- HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)
HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...
- 2018 Nowcoder Multi-University Training Contest 2
目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...
- dp - 2015 Multi-University Training Contest 2 1004 Delicious Apples
Delicious Apples Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5303 Mean: 一条长为L的环形路上种着n棵 ...
- 2015 Multi-University Training Contest 2 1004 Delicious Apples(DP)
pid=5303">题目链接 题意:长度为l 的环,有n棵果树,背包容量为k,告诉你k棵苹果树的id.以及每棵树上结的果子数.背包一旦装满要返回起点(id==0) 清空,问你至少走多少 ...
- 2018 Nowcoder Multi-University Training Contest 1
Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...
随机推荐
- vue项目微信分享之后路由链接被破坏怎么办
异常现象: 多页面应用,路由采用hash模式,链接带有"#". 在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?fromTimel ...
- TZOJ 3244 Happy YuYu's Birthday(数学几何)
描述 9月10日教师节,也是YuYu的生日,妈妈给YuYu准备了一个很大的圆形蛋糕,YuYu看中了蛋糕中间那诱人的樱桃(都挤到一块啦),小家伙很高兴,心里开始盘算着如何将樱桃全部分给自己.YuYu是个 ...
- Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...
- xcode 更新svn/Git后发现模拟器显示No Scheme问题
这个是由于XXX..xcodeproj包中xcuserdata文件夹中user.xcuserdatad文件夹名字的问题...user.xcuserdatad文件夹的名字,不是当前用户的名字,就会显示n ...
- Struts框架的数据封装二之模型驱动方式
Struts2中提供了两类数据封装的方式? * 第二种方式:模型驱动 > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别! & ...
- 关于thymeleaf的if多条件判断
<ul class="nav nav-second-level"> <li th:each="cmenu : ${menu.children}" ...
- springBoot整合Quarzt2.3
首先,你要配置好springboot的配置(在resources下) 我把其改为application.yml # Tomcat server: tomcat: uri-encoding: UTF-8 ...
- 用js实现回车登录而不用点击登录按钮
在你的登录jsp里面,添加一个js <script> function on_return(){ //on_return这是方法名 if(window.event.keyCode == 1 ...
- c++ opencv 3.2 +Mfc VS2015窗体显示图片方法
本文仅涉及一些核心步骤,具体 OpenCV 的配置以及其他的细节问题,请参考 VS2010 / MFC + OpenCV 2.4.1打开图片. 1. 新建 MFC 对话框项目 基于对话框,不使用Uni ...
- (转)DataRow的各种状态和DataView的两种过滤属性
DataRow的各种状态 http://www.cnblogs.com/zxjyuan/archive/2008/08/20/1271987.html 一个DataRow对象刚被创建之后(DataTa ...