首页 > 其他分享 >P1133 教主的花园

P1133 教主的花园

时间:2024-08-06 22:18:07浏览次数:14  
标签:int ll st next 教主 low P1133 now 花园

原题链接

题解

假如不是环,你会做吗?

从左到右遍历 \(i\) 第 \(i\) 棵树的放置只与前面一棵树有关,线性dp

而图一定长这样:

当第 \(n\) 棵树为 \(3\) 的时候,无论第一棵树是 \(1\) 还是 \(2\)(不能为3,因为3不会往上),都符合环的要求

\(1\) 同理

因此我们只需要考虑第 \(n\) 棵树为 \(2\) 的情况

假如第 \(n\) 棵树是 \(2\),那么第 \(1\) 棵树不是1就是3,因此只需要把第一棵树移到 \(n+1\) 的位置再进行一次dp即可

code

#include<bits/stdc++.h>
using namespace std;
/*
#define int long long
#define double long double
#define lowbit(x) ((x)&(-x))
const ll inf=1e18;
const ll mod=1e9+7;

const ll N=4e5;
ll qpow(ll a,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1) res=res*a%mod;
        a=a*a%mod;
        n>>=1;
    }
    return res;
}
ll inv(ll x)
{
    return qpow(x,mod-2);
}
ll fa[2000005];
ll finds(ll now){return now==fa[now]?now:finds(fa[now]);}

vector<ll> G[200005];

ll dfn[200005],low[200005];
ll cnt=0,num=0;
ll in_st[200005]={0};
stack<ll> st;
ll belong[200005]={0};

void scc(ll now,ll fa)
{
    dfn[now]=++cnt;
    low[now]=dfn[now];
    in_st[now]=1;
    st.push(now);

    for(auto next:G[now])
    {
        if(next==fa) continue;

        if(!dfn[next])
        {
            scc(next,now);
            low[now]=min(low[now],low[next]);
        }
        else if(in_st[next])
        {
            low[now]=min(low[now],dfn[next]);
        }
    }

    if(low[now]==dfn[now])
    {
        ll x;
        num++;
        do
        {
            x=st.top();
            st.pop();
            in_st[x]=0;
            belong[x]=num;
        }while(x!=now);
    }
}
vector<int> prime;
bool mark[200005]={0};
void shai()
{
    for(int i=2;i<=200000;++)
    {
        if(!mark[i]) prime.push_back(i);

        for(auto it:prime)
        {
            if(it*i>200000) break;

            mark[it*i]=1;
            if(it%i==0) break;
        }
    }
}
*/

int a[100005][5];

int dp[100005][5][5]={0};

void solve()
{
    int n;
    cin>>n;

    for(int i=1;i<=n;i++) cin>>a[i][1]>>a[i][2]>>a[i][3];

    for(int i=1;i<=n;i++)
    {
        dp[i][1][1]=dp[i-1][2][2]+a[i][1];
        dp[i][1][1]=max(dp[i][1][1],dp[i-1][3][2]+a[i][1]);

        dp[i][2][1]=dp[i-1][3][2]+a[i][2];
        dp[i][2][2]=dp[i-1][1][1]+a[i][2];

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

    int ans=0;

    ans=max(ans,dp[n][1][1]);
    ans=max(ans,dp[n][3][2]);
    memset(dp,0,sizeof dp);

    for(int i=1;i<=3;i++) a[n+1][i]=a[1][i];
    for(int i=2;i<=n+1;i++)
    {
        dp[i][1][1]=dp[i-1][2][2]+a[i][1];
        dp[i][1][1]=max(dp[i][1][1],dp[i-1][3][2]+a[i][1]);

        dp[i][2][1]=dp[i-1][3][2]+a[i][2];
        dp[i][2][2]=dp[i-1][1][1]+a[i][2];

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

    ans=max(ans,dp[n+1][1][1]);
    ans=max(ans,dp[n+1][3][2]);
    cout<<ans<<'\n';
}
signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int TT=1;
    //cin>>TT;
    while(TT--) solve();
    return 0;
}


标签:int,ll,st,next,教主,low,P1133,now,花园
From: https://www.cnblogs.com/pure4knowledge/p/18346084

相关文章

  • 花园改造 题解
    题目id:9989题目描述小\(X\)开始改造她的环形的花园了,具体来说她要在花园的环上种满\(n\)棵树。她现在有\(3\)种树:种子、小树苗和大树。每个位置上种不同的树会产生不同的满意度,具体来说在第\(i\)个位置,种种子会产生\(a_i\)的满意度,种小树苗会产生\(b_i\)的满意度,种大树会产生\(c......
  • 洛谷P2801 教主的魔法之分块板子
    洛谷P2801题解传送锚点摸鱼环节教主的魔法题目描述教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是\(N\)个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为\(1,2,\ldots,N\)。每个人的身高一开始都是不超过\(1000\)......
  • LeetCode 1788. 最大化花园的美观度
    1788.最大化花园的美观度有一个花园,有 n 朵花,这些花都有一个用整数表示的美观度。这些花被种在一条线上。给定一个长度为 n 的整数类型数组 flowers ,每一个 flowers[i] 表示第 i 朵花的美观度。一个花园满足下列条件时,该花园是有效的。花园中至少包含两朵花。第......
  • 前端后花园周刊vol.19-ESLint的下一个11年计划
    ⚡️行业动态ESLint的下一步计划:ESLint已有11年历史,它正在为下一个11年做准备,继续发展成为一种与语言无关的linter,任何人都可以为其编写插件。ESLint9.0中引入的新配置系统“只是重大变革的开始”。加速JavaScript生态系统:隔离声明TypeScript的新隔离声明功能......
  • P1357 花园
    P1357花园矩阵快速幂优化dp考虑dp。观察到\(m\)范围很小,可以设\(f_{i,s}\)表示考虑完前\(i\)个,\([i-m+1,i]\)的花盆状态为二进制数\(s\)。转移时\(i-1\)的\(s\)只有两种情况,其中一种需要判断合法。于是就有了复杂度\(O(n2^5)\)的做法。考虑优化。把所有\(f_......
  • QQ家园文字游戏【魔法花园】复刻(一):花朵的种植与操作
    魔法花园是QQ家园中的一款种植花朵养成类文字游戏,随着QQ家园的关闭游戏也一同关闭。作为一款简单的养成类游戏,当时拥有庞大的用户群体,当初定闹钟去收花、偷花还记忆犹新。随着移动网络的发展,文字类游戏已经渐渐没落,已经没有多少人去游玩,很多比较有趣的文字游戏也一并消失了。魔法......
  • 信义君御山汇珑花园
    深圳市规划和自然资源局龙岗管理局关于公布信义君御山汇珑花园总平面图的通告--国土资源(sz.gov.cn)......
  • 探索谷歌的秘密花园:Google文件系统GFS之旅(Google File System)
    文章目录......
  • 中亿睿拼接屏助力东莞南山府花园项目,打造智能营销中心
    拼接屏在智能家居、智能办公等领域中的应用越来越广泛。其中,中亿睿拼接屏以其卓越的性能和品质,成为了众多企业和机构的首选。小编今天重点介绍一下中亿睿拼接屏如何助力东莞南山府花园项目,打造智能营销中心。一、 项目背景东莞南山府花园项目是一个高端住宅项目,为了更好地展示房源......
  • 【教3妹学编程-算法题】收集足够苹果的最小花园周长
    3妹:“在小小的花园里面挖呀挖呀挖,种小小的种子开小小的花”2哥 :3妹也会唱这首儿歌呀,这首儿歌在五一期间很火啊。3妹:是呀,小朋友们都喜欢唱,我这个200多个月的大朋友也喜欢唱,哈哈2哥 :甜美的歌声加上黄老师甜美的外表,很治愈!3妹:“在特别大的花园里面挖呀挖呀挖,种特别大的种子开......