• 牛客寒假算法基础集训营6 美食 (贪心)


    美食

    链接:https://ac.nowcoder.com/acm/contest/332/D

    题目描述

    小B喜欢美食。
    现在有n个美食排成一排摆在小B的面前,依次编号为1..n,编号为i的食物大小为 a[i] ,即足够小B吃 a[i] 口。
    小B每次会吃两口,这两口要么是编号相同的美食,要么是编号之差的绝对值为1的美食。
    小B想知道,她最多能吃几次?

    输入描述:

    第1行一个正整数n,表示美食个数
    接下来n行,第i行一个整数a[i],表示编号为i的美食的大小

    输出描述:

    一个数表示小B最多吃几次。
    示例1

    输入

    4
    1
    5
    7
    8

    输出

    10

    说明

    用二元组(a,b)表示某一次吃的两个美食分别为第a个美食和第b个美食,则下面为一个吃10次的方案:
    (1,2)(2,2)(2,2)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4)(3,4)
    注意不一定要吃完。

    备注:

    题解:

    i从1到n枚举,依次贪心。

    对于a[i],

    首先把答案加上a[i]/2,

    如果a[i]是奇数且a[i+1]>0,则把a[i+1]减去1,答案加上1。敲黑板!!一定要注意a[i+1]会小于0不够减!!

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 typedef long long ll;
     7 int n;
     8 ll a[1000010];
     9 int main()
    10 {
    11     cin>>n;
    12     ll sum=0;
    13       
    14     for(int i=1;i<=n;i++)
    15     {
    16         scanf("%lld",&a[i]);
    17       
    18     }
    19     if(n==1){
    20         printf("%lld
    ",a[1]/2);
    21         return 0;
    22     }
    23     for(int i=1;i<=n;i++)
    24     {
    25         if(i==1&&a[i]>0)
    26         {
    27             sum+=a[i]/2;
    28             a[i]=a[i]%2;
    29             if(a[i]==1&&a[i+1]>0)
    30             {
    31                 sum++;
    32                 a[i+1]--;
    33             }     
    34         }
    35         else if(i==n&&a[i]>0)
    36         {
    37             sum+=a[i]/2;
    38         }
    39         else if(a[i]>0)
    40         {
    41             sum+=a[i]/2;
    42             a[i]=a[i]%2;
    43             if(a[i]==1&&a[i+1]>0)
    44             {
    45                 sum++;
    46                 a[i+1]--;
    47             }
    48         }
    49     }
    50     printf("%lld
    ",sum);
    51     return 0;
    52 }
  • 相关阅读:
    spring配置详解
    表单重复提交解决办法
    Java 两个变量交换值
    spring @ExceptionHandler注解方式实现异常统一处理
    mybatis实战
    使用soapui调用webservice接口
    使用火狐的restclient发送http接口post及get请求
    很多网站301重定向
    邮件发布google blogger 博客
    php file取重复
  • 原文地址:https://www.cnblogs.com/1013star/p/10372423.html
Copyright © 2020-2023  润新知