最开始拿到这道题的时候,题目中其实只规定了两种水果的饱食度,可以理解成价值或是重量,在不超过T的情况求最大值。第一眼看过去感觉就是装箱问题(背包),只不过这道题用的是完全背包,但是考虑到喝水的情况,做背包的时候,反正没做过这种题,但是我们可以把它转移为搜索的做法,有一种01背包的思路

每一次搜索,把吃橙子和柠檬的情况都处理一次,又因为只能喝一次水,我们只需要用bool类型的判断一下就好了,记住处理越界的情况

#include<bits/stdc++.h>
using namespace std;
int a,b,t;
int ans[10005];
int m;
void dfs(int v,int hs) {
if(v>t) return ;
if(v==t) {
ans[++m]=t;
if(m!=1) return ;
}
if(v>ans[1]) ans[1]=v;
if(hs==1) {
dfs(v/2,0);
}
dfs(v+a,hs);
dfs(v+b,hs);
}
int main() {
cin>>t>>a>>b;
dfs(0,1);
cout<<ans[1];
return 0;
}

但是这个程序只能得76分,因为TLE了,就是这道题的瓶颈。因为在深搜的时候,就会处理所有可能的答案和情况,导致超时,又因为是调用函数,不容易中途退出,所以在写的时候应该换一种思路

我们用一个数组来存储搜到的答案,搜到的第一个答案就是正解,对于其他所有的情况,想都不要想直接return,节省多出来的时空间。除了这一种做法,还有一个比较简单的,可能是我对电脑程序运行不太了解的原因,可以直接使用exit(0),强制退出程序

#include<bits/stdc++.h>
using namespace std;
int a,b,t;
int ans[1000005];
int m;
void dfs(int v,int hs) {
if(m>1) return ;
if(v>t) return ;
if(v==t) {
ans[++m]=t;
if(m!=1) return ;
}
if(v>ans[1]) ans[1]=v;
if(hs==1) {
dfs(v/2,0);
}
dfs(v+a,hs);
dfs(v+b,hs);
}
int main() {
cin>>t>>a>>b;
dfs(0,1);
cout<<ans[1];
return 0;
}

P4817 Fruit Feast G的更多相关文章

  1. P4817 [USACO15DEC]Fruit Feast 水果盛宴

    P4817 [USACO15DEC]Fruit Feast 水果盛宴 现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA :每吃一个柠檬,饱食度就会增加 BB .Bessie还有 ...

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

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

  3. Fruit Feast

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

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

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

  5. bzoj4393: [Usaco2015 Dec]Fruit Feast

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

  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. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

随机推荐

  1. Java实现 LeetCode 807 保持城市天际线 (暴力)

    807. 保持城市天际线 在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度. 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度. 高度 0 也被认为是建筑物. 最后 ...

  2. Java实现 LeetCode 753 破解保险箱(递归)

    753. 破解保险箱 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果 ...

  3. Java实现 蓝桥杯VIP 算法训练 入学考试

    问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  4. Java实现 蓝桥杯VIP 算法训练 回文数

    import java.util.Scanner; public class 回文数 { static int time = 0; public static int change(String st ...

  5. Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…

    import java.util.Scanner; public class Main{ private static Scanner cin; public static void main(Str ...

  6. 温故知新-多线程-深入刨析synchronized

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 文章目录 摘要 synchroniz ...

  7. Linux中tomcat的部署

    红帽7如何配置tomcat 1.下载tomcat9.0和java-1.8 tomcat的下载地址: https://tomcat.apache.org/ java1.8是radhat7自带: [roo ...

  8. (三)log4j常用配置

    控制台(console) log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = ...

  9. jmeter对数据库进行简单的压测

    1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于:    \java\jre\lib\ext 文件为:mysql-connect ...

  10. APP——python——自动化环境搭建01

    前提:python以及pycharm安装完成. ---------------------------------------------------------------------------- ...