可爱精灵宝贝 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 状态压缩 ...
随机推荐
- Jenkins 管道 工作流 自动化部署
jenkins Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目复刻. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器 ...
- golang初探与命令源码分析
前段时间有群友在群里问一个go语言的问题: 就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数.其中main.go和hello.go同属于main包.但是在mai ...
- 重新整理django中Auth模块
0907自我总结 重新整理django中Auth模块 from django.contrib import auth 一.设置 默认Auth表单 auth默认是使用自带的user表单 自定义Auth表 ...
- PMP 项目管理第六版- 组织治理与项目治理之间的关系
组织治理: 1.组织治理通过制定政策和流程,用结构化方式指明工作方向并进行控制,以便实现战略和运营目标. 2,组织治理通常由董事会执行,以确保对相关方的最终责任得以落实,并保持公平和透明. 项目治理: ...
- CF543A Writing Code
题目描述 Programmers working on a large project have just received a task to write exactly m m m lines o ...
- iview和element中日期选择器快捷选项的定制控件
公司的两个vue项目中都用到了iview和element这个框架,最近的两个需求都有关于日期选择的定制控件,就是要求日期选择的快捷选项左边栏有包含今日.昨日.本周.上周.最近一周.本月.上月.上季 ...
- vue —— 监听
vue的监听用途很大 比如:通过数据的值的变化,执行某个方法 首先:data中要有个变量初始值 finalTotalAmount的初始值是0 我们想当finalTotalAmount值发生变化时,执行 ...
- 概率图模型(PGM):贝叶斯网(Bayesian network)初探
1. 从贝叶斯方法(思想)说起 - 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界 ...
- 如何在 Creator3D 中切换模型贴图,超级简单!
效果预览 前两天有伙伴在 QQ 上询问,如何在 Creator 3D 中切换模型贴图.Shawn 之前也没尝试过,不过根据之前 Cocos Creator 的经验以及这几天对 Creator 3D 的 ...
- org.thymeleaf.exceptions.TemplateInputException: Error resolving template 报错
org.thymeleaf.exceptions.TemplateInputException: Error resolving template报错 遇到二次,第一次是刚刚学的时候,都是一个原因,而 ...