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中所有权 ...
随机推荐
- Trie树学习
这几天在看Hadoop的排序,用到了有TotalSortPartition,其中用到了一种叫做trie树的数据结构,每次看到这种自己之前没有听过的数据结构就想去看一下原理,然后再网上看几篇博客,有时间 ...
- pip安装错误,用镜像
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'Connec ...
- saltstack之定时管理
1.设置定时任务 /srv/salt/cron/ntpdate.sls /usr/sbin/ntpdate 10.31.10.3; /sbin/hwclock -w: cron.present: - ...
- sql生成器(含凝视)问题修复版
接上篇http://blog.csdn.net/panliuwen/article/details/47406455 sql生成器--生成含凝视的sql语句 今天我使用自己写的sql生成器了.自我感觉 ...
- iOS 平台如何使用 TestFlight 进行 Beta 测试
使用 TestFlight,你可以向测试人员发布你 App 的 prerelease 版本来收集反馈信息,为将来发布 App 的正式版做准备.现在 TestFlight 是一个可选功能,你也可以不使用 ...
- Lumen开发:简单实现auth用户认证
打开bootstrap/app.php,取消下面两段代码的注释, $app->middleware([ App\Http\Middleware\ExampleMiddleware::class ...
- 【原创】Hibernate自动生成(1)
本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...
- python 函数的进阶
1. 动态参数 位置参数的动态参数: *args 动态接收参数的时候要注意: 动态参数必须在位置参数后面 顺序: 位置参数, 动态参数*, 默认值参数 例子: def chi(a, b, *food, ...
- Python闲谈(二)聊聊最小二乘法以及leastsq函数
1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一 ...
- cmder 使用 linux bash 管道符 | grep 来筛选文件
ls -l | grep -i fira -rw-r--r-- 用户名 Feb : FiraCode-Bold.otf -rw-r--r-- 用户名 Nov FiraCode-Bold_01.ttf ...