首页 > 其他 > 详细

Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)

时间:2020-10-24 23:03:26      阅读:34      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:给你两个长度相同的数组,每次从两个数组中选数(也可以不选),但是不可以在同一个数组中连续选两次,问能选的最大值是多少?

  • 题解:dp,\(dp[i][0]\)表示第\(i\)个位置不选,\(dp[i][1]\)表示第\(i\)个位置选第一个数组的数,同理\(dp[i][2]\)就是第二个,不选的话,\(dp[i][0]\)可以从上个位置的第一个和第二个的最大值转移而来,而\(dp[i][1]\)可以从上个位置的第二个数组或者不选的转移而来,\(dp[i][2]\)也是同理,具体看代码.

  • 代码:

    int n;
    ll h1[N],h2[N];
    ll dp[N][3];
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        cin>>n;
        for(int i=1;i<=n;++i) cin>>h1[i];
        for(int i=1;i<=n;++i) cin>>h2[i];
    
        for(int i=1;i<=n;++i){
            dp[i][0]=max(dp[i-1][1],dp[i-1][2]);
            dp[i][1]=max(dp[i-1][2]+h1[i],dp[i-1][0]+h1[i]);
            dp[i][2]=max(dp[i-1][1]+h2[i],dp[i-1][0]+h2[i]);
        }
    
        cout<<max({dp[n][0],dp[n][1],dp[n][2]})<<endl;
    
        return 0;
    }
    
    

Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)

原文:https://www.cnblogs.com/lr599909928/p/13870876.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!