• [vijos1120]花生采摘<贪心>


    题目链接:https://vijos.org/p/1120

    这怕是我打过最水的一道题了,但是这道隶属于普及组难度的题我竟然提交4次才过,这不禁让我有些后怕,所以还是含泪写下这篇博客,用来警示一下自己;

    这题半天不A的原因还是因为是细节问题,第一遍打的时候我压根没有分析,只是凭着感觉打了,但是过后就发现有一些if语句没写好,但是在第三次后我卡了比较久

    现在终于发现最后一个问题,不禁有点无语,就是我的程序里,假如所有的花生都采摘了就没有输出,因为我的循环是一旦这一株时间来不及采摘,我就return 0;跳程序

    所以忽略了最基础的所有花生都采完这一情况

    这道题方法很多,因为是普及组的题,很多方法都可以过,我的想法是,记录所有的有花生的点,按照花生个数排个序,然后依次循环,如果剩下的时间可以支持着猴子去采摘当前这棵并且回到路边,那就去采摘这一棵,并在时间上减去到这棵的时间和采摘的时间(不减去回路边的时间),因为在判断时加上回路边是为了给自己一条后路,假设你当前时间满足去当前这棵花生,但是去了就回不去了,那就肯定不能去的,这个就是我的贪心,思想很简单,理解不了随便举个例子就可以了

    然后我想强调的是:一定要仔细去考虑,不要因为题简单而松懈,注意情况是否考虑完全,这类的题要考虑的情况大致分三种:可能全部取完,可能一株都取不到,可能取一部分,

    然后从时间考虑又分几个类:时间没有变化,时间有剩余,时间花完了

    然后就看看这水得一*的代码吧

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstdlib>
     4 #define maxn 25
     5 using namespace std;
     6 struct node{
     7     int x,y,val,time;
     8 }e[maxn*maxn];
     9 int n,m,t,ans,map[maxn][maxn],tot,sx,sy,d;
    10 
    11 int comp(const void *a,const void *b){return (*(struct node*)a).val<(*(struct node*)b).val?1:-1;}
    12 
    13 int main(){
    14     scanf("%d%d%d",&n,&m,&t);
    15     for(int i=1;i<=n;i++){
    16         for(int j=1;j<=m;j++){
    17             int a;scanf("%d",&a);
    18             if(a>0){
    19                 tot++;e[tot].x=i;e[tot].y=j;e[tot].val=a;
    20                 e[tot].time=e[tot].x;
    21             }
    22         }
    23     }
    24     e[0].val=600;sx=sy=-1;
    25     qsort(e,tot+1,sizeof(e[0]),comp);
    26     for(int i=1;i<=tot;i++){
    27         if(sx==-1&&sy==-1){
    28             d=e[i].x+1;//
    29         }else d=abs(e[i].x-sx)+abs(e[i].y-sy)+1;//距离加上采摘时间 
    30         if(d+e[i].time<=t){
    31             t-=d;
    32             sx=e[i].x;sy=e[i].y;
    33             ans+=e[i].val;
    34         }else{
    35             t-=e[i-1].time;
    36             printf("%d",ans);return 0;
    37         }
    38     }
    39     printf("%d",ans);
    40 }
    View Code
  • 相关阅读:
    SQL2000中创建作业(定时查询,更新)(转)
    Windows下如何安装MongoDB
    开发高性能的MongoDB应用—浅谈MongoDB性能优化(转)
    大数据时代的数据存储,非关系型数据库MongoDB(一)(转)
    Memcached在Windows下的配置和使用(转)
    mysql中去重 distinct 用法
    k8s install
    3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
    2.LXC和namespace介绍
    python类中两个列表实例如何相加或相减
  • 原文地址:https://www.cnblogs.com/Danzel-Aria233/p/7492894.html
Copyright © 2020-2023  润新知