UPC-篮球运动(线性DP)

简介: UPC-篮球运动(线性DP)

篮球运动

时间限制: 1 Sec 内存限制: 128 MB

[提交] [状态]

题目描述

小明建造了一个篮球场,他请来了2行n列的人,想让他们进行比赛。每一个人都有一个能力值,第一行分别为h11,h12,…,h1n,第二行为h21,h22,…,h2n。现在小明可以选一些人组成一个最强团队。但是选人是有规则的,因为选一个人会让附近的人都很妒忌,所以他既不会同一行里连续选择2个人,也不会同一列里的连续选择2个人。

现在他希望所选团队的能力值的之和最大,但人太多了,所以他想请聪明的你帮他解决这个问题。解决在满足规则的情况下能力值的和最大为多少?


输入

第一行输入一个整数n(1≤n≤105),表示每行中的学生人数。

第二行输入n个整数h[1,1],h[1,2],…,h[1,n](1≤h[1,i]≤109),其中h[1,i]表示第一行中的第i个学生能力值。

第三行输入n个整数h[2,1],h[2,2],…,h[2,n](1≤h[2,i]≤109),其中h[2,i]表示第二行中的第i个学生能力值。

输出

输出一个整数,表示所选团队中能力值之和最大。

样例输入 Copy

【样例1】

5

9 3 5 7 3

5 8 1 4 5

【样例2】

3

1 2 9

10 1 1

【样例3】

1

7

4

样例输出 Copy

【样例1】

29

【样例2】

19

【样例3】

7

提示

样例1说明:小明可以选择以下团队:9,8,7,5.

样例2说明:小明可以选择以下团队

60a6bcefe26f4b118e50f46e4d0afd1d.png

思路:

想到了dp但是比赛时用一维推了好久没推出来

中午看到大佬博客又想起了光光说过“dp推不出来可以先增加维数”

所以还是很好推的


dp[i][j]表示只从前i个中选且该列的状态为j的最大值

j=0表示前一列中哪个都不选

j=1表示前一列中选第一行的,这一列只能选第二行的

j=2表示前一列中选第二行的,这一列只能选第一行的


状态转移方程如下:

    dp[i][0]=max(dp[i-1][1],dp[i-1][2]);
        dp[i][1]=max(dp[i-1][2],dp[i-1][0])+a[1][i];
        dp[i][2]=max(dp[i-1][0],dp[i-1][1])+a[2][i];

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline void read(ll &x){
   ll s = 0, w = 1; char ch = getchar();
   while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar(); }
   while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
   x = s*w;
}
const int maxn=1e5+150;
ll dp[maxn][3];
int n;
ll a[3][maxn];
void AC(){
    cin>>n;
    for(int i=1;i<=2;i++)
        for(int j=1;j<=n;j++)
            read(a[i][j]);
    dp[1][1]=a[1][1],dp[1][2]=a[2][1];
    for(int i=2;i<=n;i++){
        dp[i][0]=max(dp[i-1][1],dp[i-1][2]);
        dp[i][1]=max(dp[i-1][2],dp[i-1][0])+a[1][i];
        dp[i][2]=max(dp[i-1][0],dp[i-1][1])+a[2][i];
    }
    cout<<max(dp[n][0],max(dp[n][1],dp[n][2]));
}
int main(){
    AC();
    return 0;
}

ps:记得数组不要越界


目录
相关文章
|
7月前
数字游戏2(数位dp)
数字游戏2(数位dp)
45 0
UPC-喜爱(打表+二分)
UPC-喜爱(打表+二分)
99 0
UPC-喜爱(打表+二分)
|
人工智能
UPC-放牛奶的冰箱(二分)
UPC-放牛奶的冰箱(二分)
113 0
UPC-放牛奶的冰箱(二分)
|
机器学习/深度学习 存储 人工智能
UPC 小澳的葫芦 (最短路+01分数规划 )
UPC 小澳的葫芦 (最短路+01分数规划 )
118 0
|
人工智能 BI Shell
UPC-购买巧克力(贪心)
UPC-购买巧克力(贪心)
111 0
UPC-探险(线段树+二分)
UPC-探险(线段树+二分)
96 0
|
人工智能
UPC——放牛奶的冰箱(二分法)
题目描述 冬冬在古子城购买了一台冰箱,冰箱内部可以表示为高度为h,深度为1,宽度为2的矩阵,最初冰箱底部只有一个架子,但冬冬可以在任何一个格子顶部放隔板,隔板的宽为2,不占用任何空间,将冰箱内部分隔成上、下两部分。 冬冬有n瓶牛奶要按顺序放入冰箱里。第i瓶牛奶的高度是ai,深度和宽度均为1。如果架子上方的相应空间至少与瓶子一样高,他可以在一个架子上放一瓶牛奶,他不能将两瓶牛奶叠在一起(如果它们之间没有架子)。
156 0
UPC——放牛奶的冰箱(二分法)
|
人工智能 安全
UPC-2021个人训练赛第20场-部分题解
RGB Triplets 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 Select Half 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 心灵的抚慰 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示
181 0
[UPC] 2021秋组队17
A Quality-Adjusted Life-Year B Gwen’s Gift C Forest for the Trees D H-Index E Driving Lanes F Treasure Spotting G Neighborhood Watch H Small Schedule I Mr. Plow King J Rainbow Road Race
115 0