可爱精灵宝贝 DP/爆搜
考崩了
T2
这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾))
DP思路:
分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵
然后就考虑DP
设f[i][j][t]表示经过从i到j的区间最后停在i,最终时刻为t可以收获的最大价值
g[i][j][t]表示经过从i到j的区间最后停在j,最终时刻为t可以收获的最大价值。
一步步往外拓展,转移方程式太长了见代码
1 #include<bits/stdc++.h> 2 #define M 105 3 #define N 1005 4 using namespace std; 5 int f[M][M][N*2],g[M][M][N*2]; 6 struct node{ 7 int A,B,T; 8 }jl[M]; 9 bool cmp(const node a,const node b) 10 { 11 return a.A<b.A||(a.A==b.A&&a.T<b.T); 12 } 13 int main() 14 { 15 memset(f,-0x3f,sizeof(f)); 16 memset(g,-0x3f,sizeof(g)); 17 int n,k,m,MAXT=0,ans=0; 18 scanf("%d%d%d",&n,&k,&m); 19 for(int i=1;i<=m;i++)scanf("%d%d%d",&jl[i].A,&jl[i].B,&jl[i].T),MAXT=max(MAXT,jl[i].T); 20 jl[m+1].A=k;jl[m+1].B=0;jl[m+1].T=0; 21 sort(jl+1,jl+m+2,cmp); 22 for(int i=1;i<=m+1;i++) 23 if(jl[i].A==k&&jl[i].B==0) 24 { 25 f[i][i][1]=g[i][i][1]=0; 26 break; 27 } 28 for(int t=1;t<=MAXT;t++) 29 for(int i=1;i<=m+1;i++) 30 for(int j=i;j<=m+1;j++) 31 { 32 ans=max(ans,max(g[i][j][t],f[i][j][t])); 33 f[i-1][j][t+jl[i].A-jl[i-1].A]=max(f[i][j][t]+(t+jl[i].A-jl[i-1].A<=jl[i-1].T?jl[i-1].B:0),f[i-1][j][t+jl[i].A-jl[i-1].A]); 34 f[i-1][j][t+jl[j].A-jl[i-1].A]=max(g[i][j][t]+(t+jl[j].A-jl[i-1].A<=jl[i-1].T?jl[i-1].B:0),f[i-1][j][t+jl[j].A-jl[i-1].A]); 35 g[i][j+1][t+jl[j+1].A-jl[i].A]=max(f[i][j][t]+(t+jl[j+1].A-jl[i].A<=jl[j+1].T?jl[j+1].B:0),g[i][j+1][t+jl[j+1].A-jl[i].A]); 36 g[i][j+1][t+jl[j+1].A-jl[j].A]=max(g[i][j][t]+(t+jl[j+1].A-jl[j].A<=jl[j+1].T?jl[j+1].B:0),g[i][j+1][t+jl[j+1].A-jl[j].A]); 37 } 38 cout<<ans<<endl; 39 return 0; 40 }
DP 2000ms
这题可以用搜索过掉,而且跑的飞快。
主要是维护一个指针,及时筛掉不能去的点。
1 #include<bits/stdc++.h> 2 #define M 105 3 #define N 1005 4 using namespace std; 5 int ans=0,MAXT,n,m,k,sum[M]; 6 struct node{ 7 int A,B,T; 8 }jl[M]; 9 bool cmp(const node a,const node b){return a.A<b.A||(a.A==b.A&&a.T<b.T);} 10 void dfs(int now,int tim,int val,int tl,int tr) 11 { 12 if(val+sum[tl]+sum[m+1]-sum[tr-1]<ans)return ;//小剪枝 13 if(tim>MAXT)return ; 14 ans=max(ans,val); 15 16 while(tl>=1&&tim+jl[now].A-jl[tl].A>jl[tl].T)tl--; 17 while(tr<=m+1&&tim+abs(jl[now].A-jl[tr].A)>jl[tr].T)tr++;//大剪枝 18 19 if(tl>=1){ 20 int tmp=tl; 21 dfs(tmp,tim+jl[now].A-jl[tmp].A,val+(tim+jl[now].A-jl[tmp].A<=jl[tmp].T)*jl[tmp].B,tl-1,tr); 22 } 23 if(tr<=m+1){ 24 int tmp=tr; 25 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+1); 26 } 27 return ; 28 } 29 int main() 30 { 31 scanf("%d%d%d",&n,&k,&m); 32 for(int i=1;i<=m;i++)scanf("%d%d%d",&jl[i].A,&jl[i].B,&jl[i].T),MAXT=max(MAXT,jl[i].T); 33 jl[m+1].A=k;jl[m+1].B=0;jl[m+1].T=0; 34 sort(jl+1,jl+m+2,cmp); 35 for(int i=1;i<=m+1;i++)sum[i]=sum[i-1]+jl[i].B; 36 for(int i=1;i<=m+1;i++) 37 if(jl[i].B==0){ 38 dfs(i,1,0,i-1,i+1);break; 39 } 40 cout<<ans<<endl; 41 return 0; 42 }
搜索20ms
这个题对那些大佬来说是水题,但对我来说却不是。
我的考试思路:
这题显然DP啊,然后呢?抓住m比较小,先把坐标离散了,然后。。。。。。。。
然后我就不会了,打了个30分的状压,状压还没裸暴力分高=_=
1.注意思路的转化,多见一些题。
2.一条路走不通的时候,换一条路走走。
3.暴力大法好哇!!!!(注意优化)
转载于:https://www.cnblogs.com/hzoi-kx/p/11342001.html
可爱精灵宝贝 DP/爆搜相关推荐
- 神奇宝贝计算机游戏程序设计,精灵宝贝神奇宝贝
精灵宝贝神奇宝贝游戏,一款非常好玩的奇幻冒险类游戏,在这个热血世界中,体验一场无比精彩的激斗冒险,每一位玩家都将会成为一名强力的战士,开启一场场精彩无比的交锋过程,所以感兴趣的朋友们还在等什么呢,快来 ...
- 容斥 + 爆搜打表 ---- 2020年南京icpc H.Harmonious Rectangle
题目链接 题目大意: 就是给你一个二维平面{(x,y)∣1≤x≤n,1≤y≤m}\{(x,y)|1\leq x\leq n,1\leq y \leq m\}{(x,y)∣1≤x≤n,1≤y≤m},你现 ...
- 1103 Integer Factorization (30 分)【难度: 中 / 爆搜】
https://pintia.cn/problem-sets/994805342720868352/problems/994805364711604224 爆搜的做法,动态规划也可以做,有时间也一个动 ...
- 1096 Consecutive Factors (20 分)【难度: 一般 / 爆搜 数论】
https://pintia.cn/problem-sets/994805342720868352/problems/994805370650738688 注意测试点1: 72=2*3*3*4 我这里 ...
- P2668 斗地主 dp+深搜版
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- UVA 2474 - Balloons in a Box 爆搜
2474 - Balloons in a Box 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&a ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- hdu 5031 Lines 爆搜
事实上嘞,这个线能够仅仅延伸一端 然后嘞,爆搜一次就能够 最后嘞,600-800ms过 本弱就是弱啊.你来打我呀-- #include<iostream> #include<cstr ...
- 【BZOJ-18532393】幸运数字Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 1817 Solved: 665 [Submit][Statu ...
- 题解HDU6148 Valley Numer(数位DP+深搜DFS)
题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...
最新文章
- 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
- ‘str‘ object has no attribute ‘get‘ 错误解决方案
- boost::integer::extended_euclidean用法的测试程序
- Java volatile关键字原理解剖
- gitlab 构建tag_GitLab常用命令 分支 Tag 配置 操作
- C# 中 System.Range 结构体
- 原生js系列之DOM工厂模式
- Find Minimum in Rotated Sorted Array
- 机器人弹古筝图片_古筝维修:40年的牡丹牌古筝,动了个外科手术
- 微信小程序云开发实战:网上商城(二)
- 各位大神,有没有类似于百度云软件开始时的设置向导的例子呀
- Git学习笔记之三:Git 工作区、暂存区和版本库
- 【无关技术·朋友圈朝花朝拾】月相
- EasyPoi导出Excel实现标记颜色
- 安卓一键清理内存_安卓的手机内存清理来啦……
- [导入]《玫瑰人生》【第80届奥斯卡获奖大片】【DVD中英字幕】【14:50发布】
- Linux中alias永久更改命令别名
- 对激光原理的初步了解
- SSH 连接工具 xshell - 业界最强大的 SSH 客户端、Linux 远程连接工具
- php学生选课系统mysql
热门文章
- 【Burp suite】intruder内的四种攻击模式(attack type)分析!
- [SSL_CHX][2021-8-18]量身高
- 华为HCNA网络工程师【从入门到精通】自学视频[肖哥]-肖宗鹏-专题视频课程
- 货币等额换算_换算单位和货币的最佳免费程序和网站
- 关注虚拟财富“.ME”域名的投资价值
- datetime的时值
- 【吐槽】Android 第一步,雀氏纸尿裤
- VS2010扩展VAX的安装使用
- Opencv学习笔记 常用函数、基础知识二
- hdu6638 Snowy Smile (最大权值和矩阵、线段树)