• 题解——P1133 教主的花园DP


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

    然后需要加一维

    然后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;
    }
  • 相关阅读:
    java入门 (七) 面向对象(三)
    java入门 (七) 面向对象(二)
    java入门 (七) 面向对象(一)
    ajax异步请求,$.each遍历拼接数据
    java入门 (六) 数组(二)
    java入门 (六) 数组(一)
    java入门 (五) 方法
    微信小程序
    776C Molly's Chemicals --- 前缀和
    CF 458C Elections --- 三分|线段树
  • 原文地址:https://www.cnblogs.com/dreagonm/p/9505483.html
Copyright © 2020-2023  润新知