P4817 [USACO15DEC]Fruit Feast 水果盛宴

现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA ;每吃一个柠檬,饱食度就会增加 BB 。Bessie还有一次喝水的机会,如果Bessie喝水前饱食度为 xx ,喝水后饱食度会变为

$\left\lfloor\dfrac{x}{2}\right\rfloor⌊2x​⌋$ 。
Bessie的饱食度不能超过 TT ,否则肚子会爆炸。试求Bessie的饱食度最大能达到多少。

递推预处理Bessie不喝水,只吃派,可以达到的饱食度,存到$V[]$数组中

然后开两个指针,$i,j$分别指向最小的和最大的饱食度,

对于每一个$i$,如果$V[i]/2+V[j]>T$,就将$j$指针左移,直到$V[i]/2+V[j]<=T$,取$ans=max(ans,V[i]/2+V[j])$

然后右移$i$指针,重复上面的操作

为什么这样做是对的?

首先,$V[i]$是单调递增的,当$V[i]$右移时,$V[i]/2$逐渐变大,$j$指针只可能左移或不变

对于$i$,动态维护了$V[i]/2+V[j]<=T$的最大值,达到了贪心的目的

复杂度$O(n)$

玄学错误:需要进行两次这样的操作,分别维护$V[i]/2+V[j]<=T$和$V[i]+V[j]/2<=T$,不然只进行其中一项的话,会WA一个点

听说$dfs$可以水过去哦,大佬可自行尝试。。。

%%GEOTCBRL%%

#include<iostream>
#include<cstdio>
#include<algorithm> using namespace std; int h[],A,B,tot,V[],T,ans; int main()
{
scanf("%d%d%d",&T,&A,&B);
h[]=;
V[++tot]=;
for(int i=;i<=T;i++){
if(i>=A&&h[i-A]) h[i]=;
if(i>=B&&h[i-B]) h[i]=;
if(h[i]) V[++tot]=i;
}
int i=,j=tot;
while(i<=j){
while(V[i]/+V[j]>T) --j;
ans=max(ans,V[i]/+V[j]);
++i;
}
i=,j=tot;
while(i<=j){
while(V[i]+V[j]/>T) --j;
ans=max(ans,V[i]+V[j]/);
++i;
}
printf("%d\n",ans); return ;
}

P4817 [USACO15DEC]Fruit Feast 水果盛宴的更多相关文章

  1. USACO 2015 December Contest, Gold Problem 2. Fruit Feast

    Problem 2. Fruit Feast 很简单的智商题(因为碰巧脑出来了所以简单一,一 原题: Bessie has broken into Farmer John's house again! ...

  2. Fruit Feast

    Fruit Feast 题目描述 Bessie has broken into Farmer John's house again! She has discovered a pile of lemo ...

  3. Fruit Feast(暴力)(动态规划)

    Fruit Feast 时间限制: 1 Sec  内存限制: 64 MB提交: 64  解决: 18[提交][状态][讨论版] 题目描述 Bessie has broken into Farmer J ...

  4. bzoj4393: [Usaco2015 Dec]Fruit Feast

    题意: T,A,B.T是上限.A和B可以随意吃但是不能超过T.有一次将吃的东西/2的机会.然后可以继续吃,不能超过T.问最多可以吃多少. =>我们先处理不能/2可以吃到哪些.然后弄个双指针扫一扫 ...

  5. P4817 Fruit Feast G

    最开始拿到这道题的时候,题目中其实只规定了两种水果的饱食度,可以理解成价值或是重量,在不超过T的情况求最大值.第一眼看过去感觉就是装箱问题(背包),只不过这道题用的是完全背包,但是考虑到喝水的情况,做 ...

  6. BZOJ 4393: [Usaco2015 Dec]Fruit Feast

    DP #include<cstdio> using namespace std; int T,A,B,F[5000005],G[5000005]; int main(){ scanf(&q ...

  7. ACM 水果 hdu 1263 一题多解

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1263 文章末有相应的一些测试数据供参考. 传统的数组解题方式 思路一: 三种属性的数据放在一个结构体里面, ...

  8. 题解报告:hdu 1263 水果

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营 ...

  9. CET4词汇

    abandon vt.丢弃:放弃,抛弃 ability n.能力:能耐,本领 abnormal a.不正常的:变态的 aboard ad.在船(车)上:上船 abroad ad.(在)国外:到处 ab ...

随机推荐

  1. 【bzoj2003】[Hnoi2010]Matrix 矩阵

    首先可以知道,如果已知第一行和第一列的数,那么可以很容易的计算出其余的数.进一步的,如果笔算将每个数的表达式写出可以得出如下结论: 第i行的第j个数(i>1,j>1)只与(1,1),(i, ...

  2. ios24--改变button的文字和图片

    // // ViewController.m // 09-UIButton内部子控件的调整 // // Created by xiaomage on 15/12/30. // Copyright © ...

  3. ios22--动画

    控制器: // // ViewController.m // 07-渐变动画 // // Created by xiaomage on 15/12/30. // Copyright © 2015年 小 ...

  4. arm-linux交叉编译工具链的制作(基于S3C2440)【转】

    本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...

  5. python-----自动解压并删除zip文件

    如何自动解压并删除zip? 如何解压  →  使用内置模块来实现(shutil.unpack_archive) 如何删除zip  →  使用内置模块os来实现(os.remove) 如何监测zip的出 ...

  6. 30. extjs getEl方法 怎么用

    转自:https://blog.csdn.net/evilcry2012/article/details/50586861 2014-10-27 11:57 提问者采纳   getEl = compo ...

  7. PCB 2019年IT工作主题【降本增效】 词云

    降本增效是IT部门永恒的主题,从自身做起.踏踏实实把工作做好 在线词云制作软件: https://wordart.com/create

  8. Linux C编程之二:Linux基础

    1.Linux的特点 (1)Linux就是一个操作系统(作为用户和计算机之间接口的软件程序) 注:操作系统的功能:命令解释,进程管理,内存管理,输入输出(I/O)操作和外围设备管理,文件管理 (2)特 ...

  9. 基于.Net Core的API框架的搭建(2)

    4.加入数据库支持 下面我们为项目加入数据库支持,修改appsettings.json: 然后我们要生成实体类,打开VS工具->NuGet包管理器->程序包管理器控制台: 输入命令: Sc ...

  10. Visual Studio 生成项目时脚本执行

    项目属性 - 生成事件 项目生成前:预先生成事件命令行: 项目生成后:后期生成事件命令行:例:copy $(ProjectDir)Reference\sms_cfg.ini $(TargetDir) ...