jzoj 5770 可爱精灵宝贝

2024-03-21 15:50
文章标签 jzoj 宝贝 可爱 精灵 5770

本文主要是介绍jzoj 5770 可爱精灵宝贝,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

这里写图片描述这里写图片描述


题解

–是区间dp(好像dfs加神秘玄学剪枝也能过?)
首先,我们可以发现这个人走过的位置是一个区域,而且区域内部的精灵要么被抓,要么消失了(总之就是与以后的转移没有关系)
所以,状态定义:
f[l][r][t] :当这个人走过区间[l,r],且目前在l处,时间为t时的最大分值
注意,l,r的左右位置要根据大小自己判断

然后我们又发现,现在这个人只有两种方法:左走或右走
他肯定是走到他没有走过的第一个有精灵的房子前,因为他不可能无视他(不符合贪心原则)
所以,转移方程:
看代码,有点长(因为还要判断这个精灵能否抓到)

最后,边界就是 :
f[起始房子][起始房子][1]=0

还有可以离散化一下,因为有很多房子前没有精灵,其实是没用的
排一下序,编号放进一个数组就行,k也要放(看成是没有价值,时间为1的精灵)


代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN=105;int n,k,m;
int a[MAXN],b[MAXN],t[MAXN];
int w[MAXN];
int maxt;
int f[MAXN][MAXN][2005];
int ans;bool comp(const int &x,const int &y){return a[x]<a[y];
}int main(){freopen("go.in","r",stdin);freopen("go.out","w",stdout);cin>>n>>k>>m;w[0]=0;a[0]=k;b[0]=0;t[0]=1;for(int i=1;i<=m;i++){scanf("%d%d%d",&a[i],&b[i],&t[i]);maxt=max(maxt,t[i]);w[i]=i;}sort(w,w+1+m,comp);memset(f,-1,sizeof(f));for(int i=0;i<=m;i++)if(a[w[i]]==k)f[i][i][1]=0;for(int time=1;time<=maxt;time++){for(int l=0;l<=m;l++){for(int r=0;r<=m;r++){if(f[l][r][time]!=-1){if(l<=r){int T=time+a[w[l]]-a[w[l-1]];if(l>0){if(T<=t[w[l-1]])f[l-1][r][T]=max(f[l-1][r][T],f[l][r][time]+b[w[l-1]]);else f[l-1][r][T]=max(f[l-1][r][T],f[l][r][time]);}T=time+a[w[r+1]]-a[w[l]];if(r<m){if(T<=t[w[r+1]])f[r+1][l][T]=max(f[r+1][l][T],f[l][r][time]+b[w[r+1]]);else f[r+1][l][T]=max(f[r+1][l][T],f[l][r][time]);}}else{int T=time+a[w[l]]-a[w[r-1]];if(r>0){if(T<=t[w[r-1]])f[r-1][l][T]=max(f[r-1][l][T],f[l][r][time]+b[w[r-1]]);elsef[r-1][l][T]=max(f[r-1][l][T],f[l][r][time]);}T=time+a[w[l+1]]-a[w[l]];if(l<m){if(T<=t[w[l+1]])f[l+1][r][T]=max(f[l+1][r][T],f[l][r][time]+b[w[l+1]]);elsef[l+1][r][T]=max(f[l+1][r][T],f[l][r][time]);}}}ans=max(ans,f[l][r][time]);}}}cout<<ans;return 0;
}

这篇关于jzoj 5770 可爱精灵宝贝的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833097

相关文章

精灵进程的创建

//代码1--实现延时--由于后台运行可能感觉不明显 //想要结束它,我只想到关机重启;查看的话,ps -ef #include <stdlib.h>   #include <unistd.h>   #include <sys/types.h>   #include <sys/stat.h>   #include <stdio.h>   #include <fcntl.h>

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

外业精灵实时查看区域等高线(如何显示等高线的高程值)

0.序 图新地球桌面端的等高线预览,既可以看到等高线,也能看到等高线的高程值。 而等高线生成功能,只有等高线没有高程值(多少米)的点标注。 导致生成的等高线不论是在图新地球桌面端、外业精灵(手机端)都不显示高程值。 本文的核心是根据等高线,生成位于等高线上面的高程点,并显示当前等高线的高度值 等高线预览: 1.根据等高线生成(高程点) 核心步骤: 1.在线的

网页性能优化01-精灵图利弊与应用场景

网页性能优化01-精灵图利弊与应用场景 精灵图:通过减少页面网络请求的数量,来提高网页加载速度 1.1-精灵图介绍 1.什么是精灵图 精灵图就是就是将几张较小的图片放在一张大图上,这张大图称之为精灵图,又叫雪碧图(CSS Sprites) 2.为什么要有精灵图? 因为浏览器在渲染DOM树的时候,会把所有的外部资源路径(例如img标签的src属性作为网络请求,向服务器发送资源) 例如淘宝网页,

精灵图(sprite)CSS动画实现

精灵图 动画效果如下 HTML代码 <div class="boxA"></div> css代码 .boxA {width: 100px;height: 400px;background:url("https://img-ask.csdn.net/upload/202005/13/1589349016_808127.png") no-repeat;background-size:

Flux【Lora模型】:微缩版黑悟空,又萌又可爱,必须赞一个

大家好我是极客菌!!! 最近一直使用黑神话的Lora玩Flux 今天我们来看看微缩版的黑神话悟空的效果。仍然使用目前效果最好的Loar:FLUX1-超写实逼真黑悟空 来看看实现的效果。 模型下载地址(需要的同学可自行扫描获取) 触发词:aiyouxiketang 下面是作者推荐的提示词: a man in armor with a beard(一个穿着盔甲,留着胡子的男人) a

通过css样式实现精灵动画

@keyframes 规则用于创建动画。在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。  这里用到animation来切换css的背景图片   .slowWalk {          /* 填入动画样式规则 */         -webkit-animation-name:person-slow;         -webkit-anim

第十二章 迁移学习-实战宝可梦精灵

文章目录 一、Pokemon数据集1.1 数据集收集1.2 数据集划分1.3 数据集加载1.4 数据预处理1.5 pytorch自定义数据库实现 二、ResNet网络搭建三、训练与测试四、迁移学习4.1 pytorch实现迁移学习 一、Pokemon数据集 1.1 数据集收集 # git下载git lfs installgit clone https://www.mo

Linux 下的Vim命令宝贝

vim 命令详解(转自:https://www.cnblogs.com/usergaojie/p/4583796.html) vi: Visual Interface 可视化接口 vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式)输入模式末行模式 模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式