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:记得数组不要越界


目录
相关文章
|
机器学习/深度学习 存储 人工智能
UPC 小澳的葫芦 (最短路+01分数规划 )
UPC 小澳的葫芦 (最短路+01分数规划 )
123 0
小Biu的骰子——UPC
题目描述 从左到右有n个方格,每一块方格上有x[i] 块黄金,最初站在第一块方格上,有一个6个面的均匀骰子, 每一个面上的权值是1−6,每次掷骰子之后按照点数y跳到y步之后的方格,如果超出范围,则重新掷骰子,问到达第n个方格能得到的期望黄金数。
126 0
|
人工智能 BI
UPC窃贼与火柴——贪心
题目描述 一个窃贼进入了火柴仓库,想要偷尽可能多的火柴。仓库里有m个集装箱,第i个集装箱里有ai个火柴盒,每个火柴盒里有bi根火柴。所有火柴盒大小相同。窃贼的帆布背包恰能容纳n个火柴盒。你的任务是找出窃贼能拿走的火柴的最大数量。他没时间重新调整火柴盒中的火柴,这就是他只是挑选不超过n个其包含火柴数之和最大的火柴盒的原因
127 0
|
开发者
UPC-自习课 模拟题
题目描述 自习课就是划水课。 你和同桌在玩井字棋,你先手。突然老师进来了。 给定一个局面,问它是否有可能下的出来。 若有可能,求出是否有赢家,若有,输出赢家。 否则,输出是否平局,或者下一步是谁的回合。
188 0
|
机器学习/深度学习 人工智能
UPC--扑克牌
题目描述 从一副含有n(n≤10000)张的扑克牌[显然每张扑克牌都不相同]中,分给m(m≤100)个人,第i个人得到ai (0≤ai≤100)张牌,求一共有几种分法,这个数可能非常大,请输出此数模10007后的结果。
117 0
|
人工智能
小Biu的区间和——UPC
题目描述 小Biu去逛超市,超市有一个长度为n的货架,第i个位置摆放着价值为a[i]的商品,小Biu有很多好朋友,他想给好朋友们买一些礼物,但是小Biu又是一个很细心地人,他想让所有朋友收到的礼物的总和一样,而且送给每个朋友的礼物必须是位置连续的一段商品,小Biu想知道他最多可以给多少个好朋友送出礼物。
171 0
|
算法
UPC——神仙贷款—>二分
题目描述 神仙由于刚到凡间故手上缺钱,于是她去银行贷款了。因此,她在贷款之后,在一段时间内将不得不每月偿还固定的分期付款。这个问题要求计算神仙向银行支付的利率。假设利率按月累计。
192 0
UPC-喜爱(打表+二分)
UPC-喜爱(打表+二分)
106 0
UPC-喜爱(打表+二分)
[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
119 0
小Biu的礼物——UPC
题目描述 小Biu送给小Piun个礼物,每个礼物的体积为v[i],现在小Piu有m个箱子,每个箱子的体积为k,去装这些物品,小Piu会从左到右依次选择每个物品,如果当前箱子可以放得下这个物品,就把物品放进去,否则就用下一个箱子,现在小Biu想知道他最少拿走前几个礼物,可以使得小Piu的箱子能装下剩下的所有物品。
138 0

热门文章

最新文章