DP:地头蛇PIPI

文章目录

  • DP:地头蛇PIPI
    • 问题
    • 思路
    • 代码

问题


思路

  我们首先有一个自然而然的想法,我们设DP[i]为1~i这些商家能收取的最大保护费。但这样设状态我们不知道最后收取了到底是哪一家的保护费,不好进行状态的转移。因此,我们把DP[i]设为:一定收取了第i个商家保护费的情况下,1 ~ i这些商家能收取的最大保护费。收取了第i个商家的保护费,那么第i-1个商家的保护费就不能收取了,那么DP[i]看起来是从DP[i-2],DP[i-3],…,DP[1]这里面转移过来,但实际上DP[i]只能从DP[i - 2]或DP[i - 3]转移得到,因为对于第i - 2个商家和第i - 3个商家,我们总能收取其中一个的保护费,而且一定要收。举个例子,若DP[i]是从DP[i-4]转移,那么第i-1/i-2/i-3个商家的保护费都不收了。而我们完全可以多收第i-2个商家的保护费,为什么不选择多收呢?因此并不需要从i-2遍历到1选出最大值,i-2~1中的最大值必然是DP[i-2]与DP[i-3]其中之一。设a[i]表示从第i家商家收取的保护费,我们得到状态转移方程为:
  DP[i]=max(DP[i-2],DP[i-3])+a[i]
  最终答案就是DP[n]与DP[n-1]中的较大值

代码

import java.util.*;public class Main {static int[] dp = new int[100005];static int[] price = new int[100005];public static void main(String[] args) {int n, i;Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {n = scanner.nextInt();for (i = 0;i < n;i++) {price[i] = scanner.nextInt();}dp[0] = price[0];if (n >= 2) {dp[1] = price[1];}if (n >= 3) {dp[2] = dp[0] + price[2];}for (i = 3;i < n;i++) {dp[i] = Math.max(dp[i - 2], dp[i - 3]) + price[i];}System.out.println(n >= 2 ? Math.max(dp[n - 1], dp[n - 2]) : n >= 1 ? dp[n - 1] : 0);}}
}

DP:地头蛇PIPI相关推荐

  1. [多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)

    文章目录 T1:分数转换 题目 题解 代码实现 T2:Slow Path Finding Algorithm 题目 题解 代码实现 T3:切面包 题目 题解 代码实现 T1:分数转换 题目 Time ...

  2. 【牛客 - 368C】流星雨(概率dp,乘法逆元)

    题干: 现在一共有n天,第i天如果有流星雨的话,会有wiwi颗流星雨. 第i天有流星雨的概率是pipi. 如果第一天有流星雨了,那么第二天有流星雨的可能性是p2+Pp2+P,否则是p2p2.相应的,如 ...

  3. 【牛客 - 317C】小a与星际探索(背包dp 或 线性基)

    题干: 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球.其中每个星球有一个能量指数pp.星球ii能到达星球jj当且仅当pi>pjpi>pj. 同时小a的飞船还 ...

  4. 小a与星际探索---DP

    题目描述 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球.其中每个星球有一个能量指数pp.星球ii能到达星球jj当且仅当pi>pjpi>pj. 同时小a的飞船 ...

  5. lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP

    E -- Expected value of the expression DESCRIPTION You are given an expression: A0O1A1O2A2⋯OnAnA0O1A1 ...

  6. Kejin Player (概率DP)hdu6656

    原题目: Cuber QQ always envies those Kejin players, who pay a lot of RMB to get a higher level in the g ...

  7. 1079: PIPI的存钱罐(完全背包)

    题目描述 PIPI有n种硬币,每种硬币有特定的重量wei[i] 克和它对应的价值val[i]. 已知有一个承重量为m的存钱罐,当里面正好装着重量为m的硬币时,问你这个存钱罐中硬币的最小价值是多少? 如 ...

  8. dp,sp,px相互转化

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

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

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

最新文章

  1. 如何对正在运行的进程,进行heap profile
  2. android一个简单的异步AsyncTask下载数示例,简单下载(07)
  3. linux wireshark_4个好用的Linux监控工具
  4. mapper中的CDATA标签的用法
  5. Spring XD 1.0.0.M5在这里!
  6. 在DOS环境下编译及运行java程序教程
  7. GCD异步加载网络图片
  8. zabbix 自定义监控
  9. 089 重用父类方法的两种方式
  10. Delphi官方网站资源
  11. [leetcode 3sum】 三数之和问题 @python
  12. EXPLOITING CVE-2016-2060 ON QUALCOMM DEVICES
  13. MTK修改sysemUI下拉的宽度为全屏
  14. 权威发布:《麻省理工科技评论》2020年“全球十大突破性技术”
  15. ffmpeg代码实现往视频文件里面叠加文字
  16. Linux下Oracle 11g安装(1)—— 系统安装篇
  17. Flink-clickhousesink
  18. 计算机人物事迹范文,人物事迹通讯稿范文.doc
  19. c语言编程斐波那契前n项,c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)...
  20. gbq可以算出土建量吗_广联达bim土建算量软件|广联达BIM土建算量GCL2013下载 - 121下载站...

热门文章

  1. Opencv去除高光
  2. 重磅消息!Java之内存泄漏调试学习与总结,分享PDF高清版
  3. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇
  4. 利用Minia软件对基因组测序二代数据的初步组装
  5. python简史_Python简史
  6. [附源码]计算机毕业设计JAVA校园超市进销存管理系统
  7. 零基础入门学习Python(21):魔法方法(1)构造和析构
  8. 关于PostMan发送请求获得响应
  9. server sql 将出生日期转为年龄_SQL中将用户的出生年月转换成对应的年龄
  10. Basic Concepts in Graphics and Architecture