[vijos1120]花生采摘<贪心>
题目链接:https://vijos.org/p/1120
这怕是我打过最水的一道题了,但是这道隶属于普及组难度的题我竟然提交4次才过,这不禁让我有些后怕,所以还是含泪写下这篇博客,用来警示一下自己;
这题半天不A的原因还是因为是细节问题,第一遍打的时候我压根没有分析,只是凭着感觉打了,但是过后就发现有一些if语句没写好,但是在第三次后我卡了比较久
现在终于发现最后一个问题,不禁有点无语,就是我的程序里,假如所有的花生都采摘了就没有输出,因为我的循环是一旦这一株时间来不及采摘,我就return 0;跳程序
所以忽略了最基础的所有花生都采完这一情况
这道题方法很多,因为是普及组的题,很多方法都可以过,我的想法是,记录所有的有花生的点,按照花生个数排个序,然后依次循环,如果剩下的时间可以支持着猴子去采摘当前这棵并且回到路边,那就去采摘这一棵,并在时间上减去到这棵的时间和采摘的时间(不减去回路边的时间),因为在判断时加上回路边是为了给自己一条后路,假设你当前时间满足去当前这棵花生,但是去了就回不去了,那就肯定不能去的,这个就是我的贪心,思想很简单,理解不了随便举个例子就可以了
然后我想强调的是:一定要仔细去考虑,不要因为题简单而松懈,注意情况是否考虑完全,这类的题要考虑的情况大致分三种:可能全部取完,可能一株都取不到,可能取一部分,
然后从时间考虑又分几个类:时间没有变化,时间有剩余,时间花完了
然后就看看这水得一*的代码吧
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#define maxn 25
using namespace std;
struct node{
int x,y,val,time;
}e[maxn*maxn];
int n,m,t,ans,map[maxn][maxn],tot,sx,sy,d; int comp(const void *a,const void *b){return (*(struct node*)a).val<(*(struct node*)b).val?:-;} int main(){
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
int a;scanf("%d",&a);
if(a>){
tot++;e[tot].x=i;e[tot].y=j;e[tot].val=a;
e[tot].time=e[tot].x;
}
}
}
e[].val=;sx=sy=-;
qsort(e,tot+,sizeof(e[]),comp);
for(int i=;i<=tot;i++){
if(sx==-&&sy==-){
d=e[i].x+;//
}else d=abs(e[i].x-sx)+abs(e[i].y-sy)+;//距离加上采摘时间
if(d+e[i].time<=t){
t-=d;
sx=e[i].x;sy=e[i].y;
ans+=e[i].val;
}else{
t-=e[i-].time;
printf("%d",ans);return ;
}
}
printf("%d",ans);
}
[vijos1120]花生采摘<贪心>的更多相关文章
- noip普及组2004 花生采摘
花生采摘 描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!--熊字". 鲁宾逊先生和多多 ...
- 【luoguP1086】【2004NOIP-Ua】花生采摘
P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都 ...
- 洛谷——P1086 花生采摘
P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都 ...
- 洛谷 P1086 花生采摘
P1086 花生采摘 将植株按花生数从大到小排序,然后按排序后的顺序摘,每次摘前计算能否在摘后回到路边,如果能就将ans加上该植株花生数,如果不能就直接输出当前ans并退出. var a:array[ ...
- 洛谷 P1086 花生采摘 题解
P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". ...
- P1086 花生采摘
题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...
- P1086 花生采摘题解
这道题只是普通的模拟,不是贪心! 重点在于这句话:“然后再找出剩下的植株里花生最多的,去采摘它的花生”. 也就是,你下一个必须找到剩下花生最多的,而不是按照贪心思想来考虑在限定时间内的最优解 那么,应 ...
- Luogu 1086 - 花生采摘 - [简单模拟]
题目链接:https://www.luogu.org/problemnew/show/P1086 题目描述鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着 ...
- 洛谷P1086 花生采摘【模拟】
题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...
随机推荐
- idea导入 spring framework项目
准备的环境:gradle,idea 注意:gradle版本不一致会报各种错误,那么怎么查找依赖的版本呢? 首先在git上把spring framework项目拉取下来, 步骤一:复制URL路径 步骤二 ...
- 一起了解 .Net Foundation 项目 No.18
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Protobuild Pr ...
- 2020ubuntu1804server编译安装redis5笔记(二)配置redis
前一篇笔记记录了ubuntu1804server编译安装redis5,接下来要配置redis5了 网址:https://www.cnblogs.com/qumogu/p/12435694.html 第 ...
- 关于PHP命名空间的讨论
什么是命名空间? 根据php.net官方翻译文档描述,命名空间是这样定义的: 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法. 在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用 ...
- Windows通过VNC连接并显示Linux桌面(Ubuntu16.04)
目录 Linux中安装VNC服务 Linux中安装桌面环境 Windows中安装VNC Viewer Linux中安装VNC服务 sudo apt-get update sudo apt-get in ...
- jmeter 性能测试基本过程及示例
jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js.html 等)以及动态资源(例如 php.jsp.ajax 等等)进行性能测试jmeter 可以挖掘出系统最大能 ...
- 左侧带三角的Card css支持hover阴影
<div class="inputReportIndex"> <div class="inner"> <div class=&qu ...
- Python接口测试(第一个接口返回的数据作为第二个参数的入参)
python代码如下 import requests url1="http://localhost:8080/pinter/com/getSku?id=1" respon=requ ...
- Linux 中useradd命令的使用
Linux 系统中通常都是root用户具有超级权限,超级用户root一般是不需要创建的,然而很多时候root用户不是任何人都可以使用的,毕竟最高权限的用户,任意使用的话,会对系统造成很多不必要的破坏. ...
- 洛古 P1312 Mayan游戏(dfs+剪枝)
题目链接 这道题和俄罗斯方块很像 很明显,我们可以看出这是一个dfs,但是,我们需要几条剪枝: 1.如果只剩下1个或2个同样颜色的方块,那么直接退出 2.相同的块不用交换 3.注意优先性,优先左边换右 ...