可爱精灵宝贝 DP/爆搜
考崩了
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/爆搜的更多相关文章
- [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)
传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...
- 可爱精灵宝贝:dp
拒绝听搜索.etc水过的.数据太弱了(尽管考场上我凭借数据太水骗了好多分) 我讲的思路和下发的题解一样.(因为我不会所以只能颓它啊) 首先你要相信这题精灵就100个,真的只有100个,这次数据范围没错 ...
- [CSP-S模拟测试]:可爱的精灵宝贝(搜索)
题目描述 $Branimirko$是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由$1$到$n$.刚开始玩家在 ...
- 铺砖头问题(完美)——爆搜&&插头DP
题意 给定一个 $n \times m$ 的格子,每个格子被染成了黑色或白色.现在要用 $1 \times 2$ 的砖块覆盖这些格子,要求块与块之间互不重叠,且覆盖了所有白色的格子,但不覆盖任意黑色格 ...
- 51nod 1989 竞赛表格 (爆搜+DP算方案)
题意 自己看 分析 其实统计出现次数与出现在矩阵的那个位置无关.所以我们定义f(i)f(i)f(i)表示iii的出现次数.那么就有转移方程式f(i)=1+∑j+rev(j)=if(j)f(i)=1+\ ...
- BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】
1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3259 Solved: 1564[Submit][Statu ...
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
随机推荐
- SpringBoot注入Mapper失败
SpringBoot注入Mapper失败,可能是因为没有加扫描Mapper层的注解 方式一:在所有mapper接口使用@Mapper注解 @Mapper public interface UserMa ...
- SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)
SpringCloud-动态配置变化监控-获取变化(支持Config.Nacos) qq交流群: 812321371 微信交流群: MercyYao 简介 配置中心有原生的 SpringCloud C ...
- 算法学习之剑指offer(三)
题目1 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在 ...
- Linxu下Yii2的POST请求被拒经历
Linxu下Yii2的POST提交被拒经历 介于对Yii2的使用,浅谈一下自己的经验,在以往的项目中我使用的框架是Yii1,由于Yii2的出现,所以极力的想使用一下它的新特性. 我的使用环境Linux ...
- Spring Boot WebFlux 集成 Mongodb 数据源操作
WebFlux 整合 Mongodb 前言 上一讲用 Map 数据结构内存式存储了数据.这样数据就不会持久化,本文我们用 MongoDB 来实现 WebFlux 对数据源的操作. 什么是 MongoD ...
- Vue-CLI项目-axios模块前后端交互(类似ajax提交)
08.31自我总结 Vue-CLI项目-axios前后端交互 一.模块的安装 npm install axios --save #--save可以不用写 二.配置main.js import axio ...
- PhantomJS not found on PATH
使用vue-cli创建项目后,npm init常出现以下问题:PhantomJS not found on PATH 这是因为文件phantomjs-2.1.1-windows.zip过大,网络不好容 ...
- [Luogu3878] [TJOI2010]分金币
题目描述 现在有n枚金币,它们可能会有不同的价值,现在要把它们分成两部分,要求这两部分金币数目之差不超过1,问这样分成的两部分金币的价值之差最小是多少? 输入输出格式 输入格式: 每个输入文件中包含多 ...
- python中requests模块-params与data的区别
一般来说,params 在 get 请求中使用,data 在 post 请求中使用
- HDFS概述(一)
HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...