题目链接: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【只考虑相邻元素】的更多相关文章

  1. Codeforces 358D Dima and Hares

    http://codeforces.com/contest/358/problem/D 题意:给出n个数,每个数取走的贡献与相邻的数有关,如果取这个数的时候,左右的数都还没被取,那么权值为a,如果左右 ...

  2. Codeforces Round #208 (Div. 2) 358D Dima and Hares

    题目链接:http://codeforces.com/problemset/problem/358/D 开始题意理解错,整个就跪了= = 题目大意:从1到n的位置取数,取数的得到值与周围的数有没有取过 ...

  3. [CodeForce]358D Dima and Hares

    有N<3000只宠物要喂,每次只能喂一只,每喂一只宠物,宠物的满足度取决于: 1 紧靠的两个邻居都没喂,a[i] 2 邻居中有一个喂过了,b[i] 3 两个邻居都喂过了,c[i] 把所有宠物喂一 ...

  4. CF358D Dima and Hares dp

    状态的定义挺奇特的~ 发现最终每一个物品一定都会被选走. 令 $f[i][0/1]$ 表示 $a[i]$ 在 $a[i-1]$ 前/后选时 $1$~$(i-1)$ 的最优解. 因为一个数字的价值只由其 ...

  5. 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 ...

  6. codeforces 429 On the Bench dp+排列组合 限制相邻元素,求合法序列数。

    限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方 ...

  7. 汕头市队赛 SRM10 dp只会看规律 && bzoj1766

    dp只会看规律 SRM 10 描述 平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖) 输入格式 第一行两个整数n,S接下来n行每行两个整数xi,yi ...

  8. CF358D Dima and Hares

    CF358D Dima and Hares 洛谷评测传送门 题目描述 Dima liked the present he got from Inna very much. He liked the p ...

  9. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

随机推荐

  1. Http调试工具-Fiddler使用指引

    转自:http://my.oschina.net/u/1388024/blog/186886#OSC_h1_9 目录[-] Fiddler是什么? Fiddler能做什么? 从哪里下载? 安装: 初次 ...

  2. 机器学习7—AdaBoost学习笔记

    Adaboost算法原理分析和实例+代码(简明易懂)(转载) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/709953 ...

  3. HDFS源码分析数据块复制监控线程ReplicationMonitor(二)

    HDFS源码分析数据块复制监控线程ReplicationMonitor(二)

  4. 解决Apache长时间占用内存大的问题,Apache 内存优化方法

    问:为什么服务器在连续运行多天后或访问峰值后,进程中的一个Apache.exe占用内存几百兆不减少?答:用记事本打开apache2\conf\httpd.conf,我在centos5上装了kloxo, ...

  5. Codeforces 38G Queue 伸展树

    题目链接:点击打开链接 题意: 给定n个人来排队 每一个人有2个參数.身份优先级和脸皮厚度 == 来的那个人会排到队尾 假设这个人的优先级比他前面那个人的优先级大就会和前面那个人交换位置. 交换一次脸 ...

  6. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1...

    之前项目一直好好的,之后电脑重装系统,数据库重新安装了一个5.6版本的,项目jar包丢失了,之后就又重新找了一些jar包倒入,结果运行报错: Caused by: com.mysql.jdbc.Mys ...

  7. 如何简单的实现一个tab页title的动画效果

    首先我们来看看实现的效果 tab上的title沉下去的效果 先来看看布局 <?xml version="1.0" encoding="utf-8"?> ...

  8. 小图拼接大图MATLAB实现

    小图拼接大图MATLAB实现 1.实现效果图 原图 效果图 2.代码 files = dir(fullfile('D:\document\GitHub\homework\digital image p ...

  9. git 常用使用命令

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html http://www.open-open.com/lib/view/open14 ...

  10. 【转】AC神组合数取模大全

    貌似少了几张图片,不过没有图片也没什么关系的感觉. 最后的究极篇也想出来了,但是貌似找不到题目,好尴尬.. 这个表示的是从n个元素中选取m个元素的方案数. (PS.组合数求模似乎只用在信息学竞赛和 A ...