码迷,mamicode.com
首页 > 其他好文 > 详细

题解——P1133 教主的花园DP

时间:2018-08-20 15:46:54      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:span   names   can   std   else   class   第一个   div   amp   

直接设二维状态具有后效性,会爆零

然后需要加一维

然后70

看了题解之后发现没有考虑1和n的关系

考虑之后,四十

然后懵逼

突然发现自己的ans更新写错了,导致每次ans都是第一个取30的情况的解

然后回到70

之后修改了一下初始化

初始化的时候也要注意排除自己假设之外的情况

100

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,dp[200200][4][2],a[200200][4],ans=0; 
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=3;j++)
            scanf("%d",&a[i][j]); 
    for(int fi=1;fi<=3;fi++){
        dp[1][1][0]=dp[1][2][0]=dp[1][3][0]=dp[1][1][1]=dp[1][2][1]=dp[1][3][1]=0;
        dp[1][fi][0]=dp[1][fi][1]=a[1][fi];
        for(int i=2;i<=n;i++){
            dp[i][1][0]=0;
            dp[i][1][1]=max(dp[i-1][2][0],dp[i-1][3][0])+a[i][1];
            dp[i][2][0]=dp[i-1][1][1]+a[i][2];
            dp[i][2][1]=dp[i-1][3][0]+a[i][2];
            dp[i][3][1]=0;
            dp[i][3][0]=max(dp[i-1][1][1],dp[i-1][2][1])+a[i][3];
        }
        if(fi==1){
            ans=max(ans,max(dp[n][2][0],dp[n][3][0]));
        }
        else if(fi==2){
            ans=max(ans,max(dp[n][1][1],dp[n][3][0]));
        }
        else{
            ans=max(ans,max(dp[n][1][1],dp[n][2][1]));
        }
    }
    printf("%d",ans);
    return 0;
}

 

题解——P1133 教主的花园DP

标签:span   names   can   std   else   class   第一个   div   amp   

原文地址:https://www.cnblogs.com/dreagonm/p/9505483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!