P4817 Fruit Feast G
最开始拿到这道题的时候,题目中其实只规定了两种水果的饱食度,可以理解成价值或是重量,在不超过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的更多相关文章
- P4817 [USACO15DEC]Fruit Feast 水果盛宴
P4817 [USACO15DEC]Fruit Feast 水果盛宴 现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA :每吃一个柠檬,饱食度就会增加 BB .Bessie还有 ...
- USACO 2015 December Contest, Gold Problem 2. Fruit Feast
Problem 2. Fruit Feast 很简单的智商题(因为碰巧脑出来了所以简单一,一 原题: Bessie has broken into Farmer John's house again! ...
- Fruit Feast
Fruit Feast 题目描述 Bessie has broken into Farmer John's house again! She has discovered a pile of lemo ...
- Fruit Feast(暴力)(动态规划)
Fruit Feast 时间限制: 1 Sec 内存限制: 64 MB提交: 64 解决: 18[提交][状态][讨论版] 题目描述 Bessie has broken into Farmer J ...
- bzoj4393: [Usaco2015 Dec]Fruit Feast
题意: T,A,B.T是上限.A和B可以随意吃但是不能超过T.有一次将吃的东西/2的机会.然后可以继续吃,不能超过T.问最多可以吃多少. =>我们先处理不能/2可以吃到哪些.然后弄个双指针扫一扫 ...
- BZOJ 4393: [Usaco2015 Dec]Fruit Feast
DP #include<cstdio> using namespace std; int T,A,B,F[5000005],G[5000005]; int main(){ scanf(&q ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
随机推荐
- Java实现 LeetCode 721 账户合并(并查集)
721. 账户合并 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails ...
- Java实现 LeetCode 236 二叉树的最近公共祖先
236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x ...
- Java实现 LeetCode 230 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. ...
- java实现股票的风险
股票的风险 股票风险 股票交易上的投机行为往往十分危险.假设某股票行为十分怪异,每天不是涨停(上涨10%)就是跌停(下跌10%).假设上涨和下跌的概率均等(都是50%).再假设交易过程没有任何手续费. ...
- [RH134] 8-磁盘管理
一.磁盘结构 我们以但磁盘的硬盘为例,如图所示: 从内向往有很多的磁道(这里我们只画了5条,实际上非常多),这个磁盘被划分为很多扇区.每个扇区有一个固定的大小,例如512Bytes. 对于多磁盘的硬盘 ...
- (四)SQLMap之Tamper篡改脚本的类型、作用、适用场景
目录结构 一.SQLMap中tamper的简介 1.tamper的作用 2.tamper用法 二.适配不同数据库类型的测试tamper 三.SQLMap中tamper篡改脚本的功能解释 一.SQLMa ...
- Servlet Session MVC模式
一 什么是Session 当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId). ...
- CentOS8.1安装Docker及Docker-compose
使用 Docker 仓库进行安装 在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库.之后,您可以从仓库安装和更新 Docker. 设置仓库 安装所 ...
- 这一次搞懂Spring代理创建及AOP链式调用过程
文章目录 前言 正文 基本概念 代理对象的创建 小结 AOP链式调用 AOP扩展知识 一.自定义全局拦截器Interceptor 二.循环依赖三级缓存存在的必要性 三.如何在Bean创建之前提前创建代 ...
- 数据库整理(三) SQL基础
数据库整理(三) SQL基础 SQL语言的特点 集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体. 可以独立完成数据库生命周期中的全部活动: ●定义和修改.删除关 ...