OpenJudge 9268:酒鬼

  • 题目
  • 思路
    • 代码

题目传送门

题目

Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令Santo高兴的是,瓶子中的酒都有不同的味道。房东说道:“你可以喝尽可能多的酒,但是一旦打开酒盖你就必须把它喝完,喝完一瓶后把它放回原处。还有一件最重要的事,你必须从左至右依次喝,并且不能连续超过三瓶,不然会给你带来坏运气。”现在可怜的Santo站在酒吧前努力的想着,他到底应该喝哪几瓶才能使喝的酒最多呢?请帮助他找出他应该喝的酒瓶号,因为思考让他感到不安。

输入格式

第一行一个整数 N ,有 N 个酒瓶。接下有 N 行,第 i+1 行的数字代表酒瓶 i 中酒的体积。

输出格式

一个数字,喝的酒的最大总体积。遵守以上规则,使得三个连续瓶子中至少一个瓶子是满的。

数据范围

N < = 700 N<=700 N<=700

输入输出样例

样例输入1

6
6
10
13
9
8
1

样例输出1

33

思路

DP。题目大概意思就是,一共有N个酒瓶,每个酒瓶最多只能选一次,每次喝酒最多喝 2 次,在连续喝酒次数 < = 2 <= 2 <=2 的条件下可以喝的酒的最大总体积。

dp[i]考虑前 i 个酒瓶喝的酒的最大总体积。
dp[i][0/1/2]考虑前 i 个酒瓶且第 i 个酒瓶是连续喝酒次数中第0 / 1 / 2 次喝,喝的酒的最大总体积。(连续第0次喝,即没有喝第 i 个酒瓶)。
dp[i] [1]= dp[i - 1][0]+b_i;
如果第 i 瓶酒是连续喝酒的第 1 次喝酒,即第 i - 1个酒瓶没有被喝。那么就在第 i - 1瓶没有喝的酒的最大总体积的基础上,加上第 i 个酒瓶中酒的体积,就是第 i 瓶酒是在连续喝酒次数的第 1 次喝酒的情况下,喝的酒的最大总体积。
dp[i] [2]= dp[i - 1][1]+b_i;
边界条件:
dp[1][0]表示前 1 个酒瓶(第 1 个酒瓶)且第 1 个酒瓶没有被喝过,喝的酒的最大总体积,即啥也没喝的时候。
dp[1][1]表示前 1 个酒瓶(第 1 个酒瓶)且第 1 个酒瓶是第 1 次被喝,喝的酒的最大总体积,即刚喝了 1 瓶的时候。

下面这个题和该题的思路几乎一样,有兴趣可以看一下。
LeetCode 198.打家劫舍

代码

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 710;
int n , ans, dp[N][2], b[N];
int main() {scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);dp[1][0] = 0;dp[1][1] = b[1];for(int i = 1; i <= n; i++) {dp[i][0] = max(dp[i - 1][0], max(dp[i - 1][1], dp[i - 1][2]));dp[i][1] = dp[i - 1][0] + b[i];dp[i][2] = dp[i - 1][1] + b[i];} ans = max(dp[n][0], max(dp[n][1], dp[n][2]));printf("%d", ans);return 0;
}

时间复杂度: O ( n ) O(n) O(n)

9268. 酒鬼(DP)相关推荐

  1. NOI2.6.9268 酒鬼 题解(C++)

    题目 9268:酒鬼 总Time Limit: 2000ms 单个测试点时间限制: 1000ms Memory Limit: 131072kB Description Santo刚刚与房东打赌赢得了一 ...

  2. dp,sp,px相互转化

    方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...

  3. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  4. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  5. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  6. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  7. [NOI2005]聪聪与可可(期望dp)

    题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...

  8. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

  9. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

最新文章

  1. Linux C 的风格
  2. 主键约束、外键约束、唯一约束、检查约束、默认值约束实例
  3. 修改 MySQL 自增ID的起始值
  4. 一个路径下挂载(匹配)多个子组件
  5. php excel header,【IT专家】PHP生成excel,方法一-header生成
  6. Spring Bean初始化的几种常规方式
  7. java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析
  8. shell脚本执行时报“bad interpreter: Text file busy“的解决方法
  9. 【DFS + backtrack】LeetCode 93. Restore IP Addresses
  10. 转载——如果让我完善几年前的一个项目,我会做哪些改进?
  11. 【算法与数据结构】哈希表-链地址法
  12. snprintf实现_高斯模糊的GLSL实现
  13. 制作windows7虚拟机镜像并配置网络
  14. python 图像手绘效果展示
  15. 物联网需要php和嵌入式吗,物联网与嵌入式两者是什么关系
  16. Codeforces718 C. Sasha and Array(线段树维护矩阵,矩阵快速幂求斐波那契数列,矩阵乘法结合律)
  17. 那个“天使”阿桑奇又回来了
  18. Graph Convolutional Tracking
  19. 敏捷学习~backlog
  20. microLED应该会取代OLED的

热门文章

  1. 生活随记-关于姚老先生
  2. The Little Book of Semaphores 信号量小书 第六章 不那么经典的问题 6.4 莫德斯大厅问题
  3. 袁琳 湖北 计算机 导师,袁琳
  4. @Mapper 与 @MapperScan 的区别
  5. 基于ETest开发某型号北斗/GPS接收机测试系统
  6. itext word模板替换_【极简Python 自动化办公】Python写入Word文档
  7. matlab cum相关计算
  8. python处理excel文件,python xlsxwriter 一文初掌握
  9. 决策树(Decision Tree) | 绘制决策树
  10. 华为路由器 VRRP主备配置