CF1195C Basketball Exercise (dp + 贪心)
题意翻译
给定一个 2×n 的矩阵,现从中选择若干数,且任意两个数不上下或左右相邻,求这些数的和最大是多少?
题目描述
Finally, a basketball court has been opened in SIS, so Demid has decided to hold a basketball exercise session. 2 \cdot n2⋅n students have come to Demid's exercise session, and he lined up them into two rows of the same size (there are exactly nn people in each row). Students are numbered from 11 to nn in each row in order from left to right.
Now Demid wants to choose a team to play basketball. He will choose players from left to right, and the index of each chosen player (excluding the first one) will be strictly greater than the index of the previously chosen player. To avoid giving preference to one of the rows, Demid chooses students in such a way that no consecutive chosen students belong to the same row. The first student can be chosen among all 2n2n students (there are no additional constraints), and a team can consist of any number of students.
Demid thinks, that in order to compose a perfect team, he should choose students in such a way, that the total height of all chosen students is maximum possible. Help Demid to find the maximum possible total height of players in a team he can choose.
输入输出格式
输入格式:
The first line of the input contains a single integer nn ( 1 \le n \le 10^51≤n≤105 ) — the number of students in each row.
The second line of the input contains nn integers h_{1, 1}, h_{1, 2}, \ldots, h_{1, n}h1,1,h1,2,…,h1,n ( 1 \le h_{1, i} \le 10^91≤h1,i≤109 ), where h_{1, i}h1,i is the height of the ii -th student in the first row.
The third line of the input contains nn integers h_{2, 1}, h_{2, 2}, \ldots, h_{2, n}h2,1,h2,2,…,h2,n ( 1 \le h_{2, i} \le 10^91≤h2,i≤109 ), where h_{2, i}h2,i is the height of the ii -th student in the second row.
输出格式:
Print a single integer — the maximum possible total height of players in a team Demid can choose.
输入输出样例
5
9 3 5 7 3
5 8 1 4 5
29
3
1 2 9
10 1 1
19
1
7
4
7
说明
In the first example Demid can choose the following team as follows:

In the second example Demid can choose the following team as follows:

题解出处:https://www.luogu.org/problemnew/solution/CF1195C
很水的一道C题……目测难度在黄~绿左右。请各位切题者合理评分。
注意到可以选择的球员编号是严格递增的,因此可以把状态的第一维定义为球员编号,第二维描述编号同为 ii 的两名球员的选取情况。
定义状态:f[i][0/1/2]f[i][0/1/2] 表示选取了编号在 ii 及以前的球员,所能得到的身高总和最大值。其中,第二维的 00 表示编号为 ii 的球员一个都不选;11 表示只选上面一个;ii 表示只选下面一个。(显然没有上下都选的情况)
状态转移方程:
f[i][0]=max{f[i−1][0],f[i−1][1],f[i−1][2]}f[i][1]=max\lbrace f[i-1][0],f[i-1][2]\rbrace+height[i][1]f[i][1]=max{f[i−1][0],f[i−1][2]}+height[i][1]f[i][2]=max\lbrace f[i-1][0],f[i-1][1]\rbrace+height[i][2]f[i][2]=max{f[i−1][0],f[i−1][1]}+height[i][2]
Update: 用贪心可以证明,在最优解中,不会出现连续两列一个不取的情况。因此, f[i][0]f[i][0] 其实没有必要考虑来自 f[i-1][0]f[i−1][0] 的状态转移。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int N;
ll h[][];
ll f[][];
int main() {
cin >> N;
for (register int i = ; i <= N; ++i) cin >> h[i][];
for (register int i = ; i <= N; ++i) cin >> h[i][];
f[][] = ;
f[][] = h[][];
f[][] = h[][];
for (register int i = ; i <= N; ++i) {
f[i][] = max(f[i - ][], max(f[i - ][], f[i - ][]));
f[i][] = max(f[i - ][], f[i - ][]) + h[i][];
f[i][] = max(f[i - ][], f[i - ][]) + h[i][];
}
cout << max(f[N][], max(f[N][], f[N][]));
return ;
}
CF1195C Basketball Exercise (dp + 贪心)的更多相关文章
- C. Basketball Exercise dp
C. Basketball Exercise time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)
题意:给你两个长度相同的数组,每次从两个数组中选数(也可以不选),但是不可以在同一个数组中连续选两次,问能选的最大值是多少? 题解:dp,\(dp[i][0]\)表示第\(i\)个位置不选,\(dp[ ...
- 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- Codeforces Round #574 (Div. 2)——C. Basketball Exercise(简单DP)
题目传送门 题意: 输入n,给出两组均为 n个数字的数组a和b,轮流从a和b数组中取出一个数字,要求严格按照当前所选数字的数组下标比上一个所选数字的数组下标更大,计算能够取出的数字加起来的总和最大能为 ...
- 【BZOJ-1046】上升序列 DP + 贪心
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3723 Solved: 1271[Submit][Stat ...
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
- 【HDU 2546】饭卡(DP+贪心)
贪心:最贵的留到最后买.状态转移方程:dp[j]=dp[j+a[i]]|dp[j],dp[i]表示余下i元. 原来就不足5元,那就不能买啦. #include<cstdio> #inclu ...
随机推荐
- vim好用的功能 sublime text2类似的实现系列一
sublime的跳转 功能 快捷键 备注 往回跳 alt+- 和vim一样方便,可以在页面些跳转,定位到上次编辑的地方 往前跳 alt+shift+- 无 定义或取消标记 ctrl+<F2> ...
- VS2010使用c++、gSOAP创建WebService 图文教程
VS2010使用c++.gSOAP创建的WebService 图文教程 环境 操作系统:Windows 7gsoap版本:2.8.32C++编译器/开发环境:Visual Studio 2010 gS ...
- QThread的源码(直接搜索"thread.cpp"即可,或者在github里搜)
void QThread::run() { (void) exec(); } int QThread::exec() { Q_D(QThread); QMutexLocker locker(& ...
- Windows Phone 8加载外部动态链接库DLL(非安装包内的)
Windows Phone 8加载外部动态链接库DLL(非安装包内的) 在<动态加载与插件化>中大概介绍了下,wp8加载非安装包的下动态链接库,这次详细梳理下. 加载外部DLL主要的原理: ...
- better later than never
工作一年半,写程序也有几年了,终于开了个博客,记录一下遇到的问题和解决方法,和其他需要记录的东西.希望自己不会懒……已经开通两周了才开始写,唉……
- Codility---Dominator
Task description A zero-indexed array A consisting of N integers is given. The dominator of array A ...
- mac 下重启 MYSQL 命令
在mac 下重启mysql的命令如下: 启动MySQL服务 sudo /usr/local/MySQL/support-files/mysql.server start 停止MySQL服务 sud ...
- 【Web前端Talk】无聊吗?写个【飞机大战】来玩吧(下篇)
上一篇介绍了如何使用cocos creator开发游戏,此篇是详细介绍功能点以及如何部署打包至微信小游戏体验. 欢迎关注我们的公众号:Web前端Talk.前端文章持续更新. 资源管理制作 1.准备工具 ...
- abp(net core)+easyui+efcore仓储系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- git上如何处理无法clone和merge
对于一些需要FQ才能克隆下来的项目,我们需要使用代理 进入terminal: 设置代理: git config --global http.proxy http://127.0.0.1:1087 gi ...