考崩了

T2

这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾))

DP思路:

分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵

然后就考虑DP

设f[i][j][t]表示经过从i到j的区间最后停在i,最终时刻为t可以收获的最大价值

g[i][j][t]表示经过从i到j的区间最后停在j,最终时刻为t可以收获的最大价值。

一步步往外拓展,转移方程式太长了见代码

 #include<bits/stdc++.h>
#define M 105
#define N 1005
using namespace std;
int f[M][M][N*],g[M][M][N*];
struct node{
int A,B,T;
}jl[M];
bool cmp(const node a,const node b)
{
return a.A<b.A||(a.A==b.A&&a.T<b.T);
}
int main()
{
memset(f,-0x3f,sizeof(f));
memset(g,-0x3f,sizeof(g));
int n,k,m,MAXT=,ans=;
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=m;i++)scanf("%d%d%d",&jl[i].A,&jl[i].B,&jl[i].T),MAXT=max(MAXT,jl[i].T);
jl[m+].A=k;jl[m+].B=;jl[m+].T=;
sort(jl+,jl+m+,cmp);
for(int i=;i<=m+;i++)
if(jl[i].A==k&&jl[i].B==)
{
f[i][i][]=g[i][i][]=;
break;
}
for(int t=;t<=MAXT;t++)
for(int i=;i<=m+;i++)
for(int j=i;j<=m+;j++)
{
ans=max(ans,max(g[i][j][t],f[i][j][t]));
f[i-][j][t+jl[i].A-jl[i-].A]=max(f[i][j][t]+(t+jl[i].A-jl[i-].A<=jl[i-].T?jl[i-].B:),f[i-][j][t+jl[i].A-jl[i-].A]);
f[i-][j][t+jl[j].A-jl[i-].A]=max(g[i][j][t]+(t+jl[j].A-jl[i-].A<=jl[i-].T?jl[i-].B:),f[i-][j][t+jl[j].A-jl[i-].A]);
g[i][j+][t+jl[j+].A-jl[i].A]=max(f[i][j][t]+(t+jl[j+].A-jl[i].A<=jl[j+].T?jl[j+].B:),g[i][j+][t+jl[j+].A-jl[i].A]);
g[i][j+][t+jl[j+].A-jl[j].A]=max(g[i][j][t]+(t+jl[j+].A-jl[j].A<=jl[j+].T?jl[j+].B:),g[i][j+][t+jl[j+].A-jl[j].A]);
}
cout<<ans<<endl;
return ;
}

DP 2000ms

这题可以用搜索过掉,而且跑的飞快。

主要是维护一个指针,及时筛掉不能去的点。

 #include<bits/stdc++.h>
#define M 105
#define N 1005
using namespace std;
int ans=,MAXT,n,m,k,sum[M];
struct node{
int A,B,T;
}jl[M];
bool cmp(const node a,const node b){return a.A<b.A||(a.A==b.A&&a.T<b.T);}
void dfs(int now,int tim,int val,int tl,int tr)
{
if(val+sum[tl]+sum[m+]-sum[tr-]<ans)return ;//小剪枝
if(tim>MAXT)return ;
ans=max(ans,val); while(tl>=&&tim+jl[now].A-jl[tl].A>jl[tl].T)tl--;
while(tr<=m+&&tim+abs(jl[now].A-jl[tr].A)>jl[tr].T)tr++;//大剪枝 if(tl>=){
int tmp=tl;
dfs(tmp,tim+jl[now].A-jl[tmp].A,val+(tim+jl[now].A-jl[tmp].A<=jl[tmp].T)*jl[tmp].B,tl-,tr);
}
if(tr<=m+){
int tmp=tr;
dfs(tmp,tim+jl[tmp].A-jl[now].A,val+(tim+jl[tmp].A-jl[now].A<=jl[tmp].T)*jl[tmp].B,tl,tr+);
}
return ;
}
int main()
{
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=m;i++)scanf("%d%d%d",&jl[i].A,&jl[i].B,&jl[i].T),MAXT=max(MAXT,jl[i].T);
jl[m+].A=k;jl[m+].B=;jl[m+].T=;
sort(jl+,jl+m+,cmp);
for(int i=;i<=m+;i++)sum[i]=sum[i-]+jl[i].B;
for(int i=;i<=m+;i++)
if(jl[i].B==){
dfs(i,,,i-,i+);break;
}
cout<<ans<<endl;
return ;
}

搜索20ms

这个题对那些大佬来说是水题,但对我来说却不是。

我的考试思路:

这题显然DP啊,然后呢?抓住m比较小,先把坐标离散了,然后。。。。。。。。

然后我就不会了,打了个30分的状压,状压还没裸暴力分高=_=

1.注意思路的转化,多见一些题。

2.一条路走不通的时候,换一条路走走。

3.暴力大法好哇!!!!(注意优化)

可爱精灵宝贝 DP/爆搜的更多相关文章

  1. [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)

    传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...

  2. 可爱精灵宝贝:dp

    拒绝听搜索.etc水过的.数据太弱了(尽管考场上我凭借数据太水骗了好多分) 我讲的思路和下发的题解一样.(因为我不会所以只能颓它啊) 首先你要相信这题精灵就100个,真的只有100个,这次数据范围没错 ...

  3. [CSP-S模拟测试]:可爱的精灵宝贝(搜索)

    题目描述 $Branimirko$是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由$1$到$n$.刚开始玩家在 ...

  4. 铺砖头问题(完美)——爆搜&&插头DP

    题意 给定一个 $n \times m$ 的格子,每个格子被染成了黑色或白色.现在要用 $1 \times 2$ 的砖块覆盖这些格子,要求块与块之间互不重叠,且覆盖了所有白色的格子,但不覆盖任意黑色格 ...

  5. 51nod 1989 竞赛表格 (爆搜+DP算方案)

    题意 自己看 分析 其实统计出现次数与出现在矩阵的那个位置无关.所以我们定义f(i)f(i)f(i)表示iii的出现次数.那么就有转移方程式f(i)=1+∑j+rev(j)=if(j)f(i)=1+\ ...

  6. BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3259  Solved: 1564[Submit][Statu ...

  7. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  8. POJ 1166 The Clocks (爆搜 || 高斯消元)

    题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...

  9. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

随机推荐

  1. 使用LitePal升级表

    传统的升级表方式   上一篇文章中我们借助MySQLiteHelper已经创建好了news这张表,这也是demo.db这个数据库的第一个版本.然而,现在需求发生了变更,我们的软件除了能看新闻之外,还应 ...

  2. 31、vue-cli3引入封装svg图标

    svg图标放大不失真,png会出现失真现象. 一.方法一 1.在对应vue项目里添加插件 vue add svg-sprite 输入 Y 2.在执行 npm install svgo svgo-loa ...

  3. web动态站面试题

    1.简述 tomcat 的启动过程? 答:Tomcat 启动--> 读取自己的 server.xml-->根据 Context 标签的内容找到项目目录. 项目入口 path-->读取 ...

  4. TP框架配合jquery进行3种方式的多图片上传

    用的TP5.1框架+jquery 一 使用form表单方式进行多图片上传 html代码: <form action="../admin/admin/cs" enctype=& ...

  5. Java集合框架,你了解多少?相信你看了这篇汇总一目了然!

    相信大多数的程序员都知道,Dictionary.Vertor.Stack和Properties这些类被用来存储和操作对象组.但是他们缺少一个核心的主题的. 集合框架设计成要满足以下的几个目标 第一条: ...

  6. docker的使用 一容器命令

    Docker容器命令 前提 执行容器的前提是有镜像 . #创建并启动容器 docker run [options] images [command][args] // option 的说明 --nam ...

  7. Java的Object类

    (1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类. (2)Object类的构造方法有一个,并且是无参构造 这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是 ...

  8. badboy录制脚本

    第一步:介绍badboy工具 1.1: 页面功能分析: 1. 界面视图,模拟浏览器,能够进行操作 2. 需要录制脚本的URL 3. 点击运行URL 4. Summary:运行的各指标,响应时间,成功事 ...

  9. 经典的Redis的主从复制搭建

    ##### 配置服务器   1).打开redis.conf文件修改 bind 指定的ip地址: ![image](https://img2018.cnblogs.com/blog/1334966/20 ...

  10. AOP框架Dora.Interception 3.0 [2]: 实现原理

    和所有的AOP框架一样,我们必须将正常的方法调用进行拦截,才能将应用到当前方法上的所有拦截器纳入当前调用链.Dora.Interception采用IL Eimit的方式实现对方法调用的拦截,接下来我们 ...