6.动态规划

动态规划

A CF510D Fox And Jumping

B CF459E Pashmak and Graph

C CF809C Find a car

D luogu P4099 [HEOI2013] SAO

E CF559E Gerald and Path

F luogu P4516 [JSOI2018] 潜入行动

G HDU6566 The Hanged Man

H UOJ 211. 【UER #6】逃跑

I CF613E Puzzle Lover

J [ABC201F] Insertion Sort

动态规划2

开题顺序: GFACBE

A BZOJ3329 Xorequ

B luogu P1912 [NOI2009] 诗人小G

C luogu P2254 [NOI2005] 瑰丽华尔兹

D CF809C Find a car

E CF161D Distance in Tree

F CF486D Valid Sets

  • 观察到 n,d2000 ,考虑钦定每个最大点是哪个点。

  • 但这样又会出现一个问题,当最大点不唯一时就会重复统计,那就同时钦定点的编号最大即可。

    点击查看代码
    struct node
    {
        ll nxt,to;
    }e[4001];
    ll head[4001],a[4001],f[4001],cnt=0;
    void add(ll u,ll v)
    {
        cnt++;
        e[cnt].nxt=head[u];
        e[cnt].to=v;
        head[u]=cnt;
    }
    void dfs(ll x,ll fa,ll rt,ll d)
    {
        f[x]=1;
        for(ll i=head[x];i!=0;i=e[i].nxt)
        {
            if(e[i].to!=fa)
            {
                if(a[rt]-a[e[i].to]<=d&&(a[rt]>a[e[i].to]||(a[rt]==a[e[i].to]&&e[i].to<rt)))
                {
                    dfs(e[i].to,x,rt,d);
                    f[x]=(f[x]+f[x]*f[e[i].to]%1000000007)%1000000007;
                }
            }
        }
    }
    int main()
    {
        ll d,n,i,u,v,ans=0;
        cin>>d>>n;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(i=1;i<=n-1;i++)
        {
            cin>>u>>v;
            add(u,v);
            add(v,u);
        }
        for(i=1;i<=n;i++)
        {
            dfs(i,0,i,d);
            ans=(ans+f[i])%1000000007;
        }
        cout<<ans<<endl;
        return 0;
    }
    

G SP7739 BOI7SOU - Sound

  • 多倍经验: luogu P4392 [BOI2007] Sound 静音问题

  • 固定长度的 RMQ 板子。

    点击查看代码
    int a[5000000];
    struct SegmentTree
    {
        int l,r,maxx=0,minn=0x7f7f7f7f;
    }tree[5000000];
    int lson(int x)
    {
        return 2*x;
    }
    int rson(int x)
    {
        return 2*x+1;
    }
    void pushup(int rt)
    {
        tree[rt].maxx=max(tree[lson(rt)].maxx,tree[rson(rt)].maxx);
        tree[rt].minn=min(tree[lson(rt)].minn,tree[rson(rt)].minn);
    }
    void build(int rt,int l,int r)
    {
        tree[rt].l=l;
        tree[rt].r=r;
        if(l==r)
        {
            tree[rt].maxx=tree[rt].minn=a[l];
            return;
        }
        int mid=(l+r)/2;
        build(lson(rt),l,mid);
        build(rson(rt),mid+1,r);
        pushup(rt);
    }
    int querymax(int rt,int l,int r)
    {
        if(l<=tree[rt].l&&tree[rt].r<=r)
        {
            return tree[rt].maxx;
        }
        int mid=(tree[rt].l+tree[rt].r)/2,maxx=0;
        if(l<=mid)
        {
            maxx=max(maxx,querymax(lson(rt),l,r));
        }
        if(r>mid)
        {
            maxx=max(maxx,querymax(rson(rt),l,r));
        }
        return maxx;
    }
    int querymin(int rt,int l,int r)
    {
        if(l<=tree[rt].l&&tree[rt].r<=r)
        {
            return tree[rt].minn;
        }
        int mid=(tree[rt].l+tree[rt].r)/2,minn=0x7f7f7f7f;
        if(l<=mid)
        {
            minn=min(minn,querymin(lson(rt),l,r));
        }
        if(r>mid)
        {
            minn=min(minn,querymin(rson(rt),l,r));
        }
        return minn;
    }
    int main()
    {
        int n,m,c,i,flag=0;
        cin>>n>>m>>c;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        build(1,1,n);
        for(i=1;i+m-1<=n;i++)
        {
            if(querymax(1,i,i+m-1)-querymin(1,i,i+m-1)<=c)
            {
                flag=1;
                cout<<i<<endl;
            }
        }
        if(flag==0)
        {
            cout<<"NONE"<<endl;
        }
        return 0;
    }
    
posted @   hzoi_Shadow  阅读(46)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
扩大
缩小
点击右上角即可分享
微信分享提示