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的更多相关文章

  1. 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 ...

  2. HDU 6312.Game-博弈-签到题 (2018 Multi-University Training Contest 2 1004)

    2018 Multi-University Training Contest 2 6312.Game 博弈,直接官方题解,懒了. 考虑将游戏变成初始时只有2~n,如果先手必胜的话,那么先手第一步按这样 ...

  3. 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个错误 ...

  4. HDU 6322.Problem D. Euler Function -欧拉函数水题(假的数论题 ̄▽ ̄) (2018 Multi-University Training Contest 3 1004)

    6322.Problem D. Euler Function 题意就是找欧拉函数为合数的第n个数是什么. 欧拉函数从1到50打个表,发现规律,然后勇敢的水一下就过了. 官方题解: 代码: //1004 ...

  5. HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)

    HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...

  6. 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 ...

  7. 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棵 ...

  8. 2015 Multi-University Training Contest 2 1004 Delicious Apples(DP)

    pid=5303">题目链接 题意:长度为l 的环,有n棵果树,背包容量为k,告诉你k棵苹果树的id.以及每棵树上结的果子数.背包一旦装满要返回起点(id==0) 清空,问你至少走多少 ...

  9. 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 ...

随机推荐

  1. ActiveMQ之java Api

    ActiveMQ 安全机制 activemq的web管理界面:http://127.0.0.1:8161/admin activemq管控台使用jetty部署,所以需要修改密码则需要修改相应的配置文件 ...

  2. redis 简介,安装与部署

    NOSQL简介 NoSQL,泛指非关系型的数据库,NoSQL数据库的四大分类: 键值(Key-Value)存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据 ...

  3. [剑指Offer]42-连续子数组的最大和(DP)

    题目链接 https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&tqId=11183&t ...

  4. 8.16 val()和html()的问题

    今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...

  5. 单击Gridview中LinkButton,获取当前行索引及某单元格值,进行相关处理

    1.在Gridview中添加模板列,在其中加入Linkbuttion,增加CommandName属性 (设置命令名),并赋值 <asp:TemplateField HeaderText=&quo ...

  6. android的图片的初步学习理解

    Android支持JPEG和PNG格式.GIF和BMP格式图片的支持. 图片最终要显示在屏幕上,都会对应一个屏幕上的点,即对应一个颜色值.不同格式的图片,只是不同压缩编码和解压算法. 也就是说,我们看 ...

  7. 使用Nginx做转发和匹配替换

    Nginx是一个强大的服务器软件,由于处理数据内容处于第七层协议应用层的原因,所以获取的数据也比较完整: Nginx做转发: 这个很简单,vi nginx.conf(编辑nginx配置文件) 添加lo ...

  8. visio2013专业版激活密匙

    Visio 2013最新产品密钥分享,在安装时可以使用以下密钥: 2NYF6-QG2CY-9F8XC-GWMBW-29VV8 FJ2N7-W8TXC-JB8KB-DCQ7Q-7T7V3 VXX6C-D ...

  9. 学习knockoutjs轻量级的MVVM框架

    教程:knockoutjs介绍 http://www.w3cfuns.com/forum.php?mod=viewthread&tid=5598714 MVVM架构~knockoutjs实现简 ...

  10. mysql --secure-file-priv is set to NULL.Operations related to importing and exporting data are disabled

    --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabledmy ...