Codeforces 358D Dima and Hares:dp【只考虑相邻元素】
题目链接:http://codeforces.com/problemset/problem/358/D
题意:
有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走。
其中,取走A[i]的收益为:
(1)若A[i-1]和A[i+1]都没被取走,则收益为a[i]
(2)若A[i-1]和A[i+1]被取走了一个,则收益为b[i]
(3)若A[i-1]和A[i+1]都被取走,则收益为c[i]
注:将A[1]的左边和A[n]的右边视为永远有一个取不走的物品。
问你最大收益是多少。
题解:
表示状态:
dp[i][0/1] = max wealth
表示A[i]比A[i-1]先取(0)或后取(1),此时取走A[1 to i-1]的最大收益。
找出答案:
ans = dp[n+1][1]
因为可以看做A[n]右边有一个不取走的物品
所以dp[n+1][1]对应的就是将所有物品取走的最大获益
如何转移:
dp[i][0] = max(dp[i-1][0]+b[i-1], dp[i-1][1]+c[i-1])
dp[i][1] = max(dp[i-1][0]+a[i-1], dp[i-1][1]+b[i-1])
根据A[i-1]的左右情况,加上对应的取走A[i-1]的获利,即为当前的总获利。
边界条件:
dp[1][0] = 0
dp[1][1] = -INF
因为将A[1]左边看作有一个物体,所以只能是A[1]先选,当前总获利为0。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 3005
#define INF 1000000000 using namespace std; int n;
int a[MAX_N];
int b[MAX_N];
int c[MAX_N];
int dp[MAX_N][]; void read()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
for(int i=;i<=n;i++) cin>>c[i];
} void work()
{
dp[][]=;
dp[][]=-INF;
for(int i=;i<=n+;i++)
{
dp[i][]=max(dp[i-][]+b[i-],dp[i-][]+c[i-]);
dp[i][]=max(dp[i-][]+a[i-],dp[i-][]+b[i-]);
}
cout<<dp[n+][]<<endl;
} int main()
{
read();
work();
}
Codeforces 358D Dima and Hares:dp【只考虑相邻元素】的更多相关文章
- Codeforces 358D Dima and Hares
http://codeforces.com/contest/358/problem/D 题意:给出n个数,每个数取走的贡献与相邻的数有关,如果取这个数的时候,左右的数都还没被取,那么权值为a,如果左右 ...
- Codeforces Round #208 (Div. 2) 358D Dima and Hares
题目链接:http://codeforces.com/problemset/problem/358/D 开始题意理解错,整个就跪了= = 题目大意:从1到n的位置取数,取数的得到值与周围的数有没有取过 ...
- [CodeForce]358D Dima and Hares
有N<3000只宠物要喂,每次只能喂一只,每喂一只宠物,宠物的满足度取决于: 1 紧靠的两个邻居都没喂,a[i] 2 邻居中有一个喂过了,b[i] 3 两个邻居都喂过了,c[i] 把所有宠物喂一 ...
- CF358D Dima and Hares dp
状态的定义挺奇特的~ 发现最终每一个物品一定都会被选走. 令 $f[i][0/1]$ 表示 $a[i]$ 在 $a[i-1]$ 前/后选时 $1$~$(i-1)$ 的最优解. 因为一个数字的价值只由其 ...
- Codeforces 358 D. Dima and Hares
dp[i][0]表示i号兔子先于i-1号兔子喂食,dp[i][1]反过来. 倒着DP D. Dima and Hares time limit per test 2 seconds memory li ...
- codeforces 429 On the Bench dp+排列组合 限制相邻元素,求合法序列数。
限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方 ...
- 汕头市队赛 SRM10 dp只会看规律 && bzoj1766
dp只会看规律 SRM 10 描述 平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖) 输入格式 第一行两个整数n,S接下来n行每行两个整数xi,yi ...
- CF358D Dima and Hares
CF358D Dima and Hares 洛谷评测传送门 题目描述 Dima liked the present he got from Inna very much. He liked the p ...
- [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)
[BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...
随机推荐
- oracle中的not in和not exists注意事项
NOT IN:不包括空值 NOT EXISTS:包括空值
- [译]GLUT教程 - 子菜单
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Sub Menus 上一节我们介绍了如何创建普通菜单和如果 ...
- hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步
在之前的博文中提到,hive的表数据是能够同步到impala中去的. 一般impala是提供实时查询操作的,像比較耗时的入库操作我们能够使用hive.然后再将数据同步到impala中.另外,我们也能够 ...
- CSMA/CD解释与理解
1. CSMA/CD含义 CSMA/CD即载波监听多点接入/碰撞检测,此协议是使用在总线型网络中的,不同计算机是通过多点接入的方式连接在一起.协议的重点在于监听和碰撞检测. 2. 为什么要监听和碰撞检 ...
- 更改Mysql 密码的4种方法(转)
原文:http://www.jb51.net/article/39454.htm 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password f ...
- 简单的积雪shader
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject' Shader "Custom/CoverSnow&q ...
- 移动端meta viewport
<meta name="viewport" content=" width=device-width, user-scalable=no, initial-scal ...
- php记录百度等搜索引擎蜘蛛的来访记录
<?php function is_robot() { $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); if (strpos($use ...
- 深入 JavaScript 中的对象以及继承原理
ES6引入了一个很甜的语法糖就是 class, class 可以帮助开发者回归到 Java 时代的面向对象编程而不是 ES5 中被诟病的面向原型编程. 我也在工作的业务代码中大量的使用 class, ...
- MySQL查询含转义字符反斜杠的时候一直为零查询无效
今天在查询一个字段时显示一直显示为0,可是表里明明有对应的数值. ) as vote_your_count from vote_beauty where beauty_person = '\u5c0f ...