E. Not Escaping 题解(dp)

Posted hunxuewangzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了E. Not Escaping 题解(dp)相关的知识,希望对你有一定的参考价值。

题目链接

题目思路

这个题意有点难说清,还是自己读比较好

这个题目我觉得是比较套路的,首先只有\\(2*k+2\\)个点有用

一个起点加上终点再加上梯子两边的起始点

问题是如何建边是一个问题,暴力建边显然会达到\\(n^2\\)

主要是在每一行内可以进行\\(dp\\)转移,一次从左往右,一次从右往左,一个有点意思的\\(dp\\)

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=2e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
int n,m,k;
int cnt;
vector<pii> g[maxn];
pii to[maxn];
ll x[maxn];
ll dp[maxn];
void init()
    for(int i=1;i<=cnt;i++)
        to[i]=0,0;
    
    cnt=0;
    for(int i=1;i<=n;i++)
        g[i].clear();
    

signed main()
    int _;scanf("%d",&_);
    while(_--)
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&x[i]);
        
        init();
        g[1].push_back(1,++cnt);
        for(int i=1,a,b,c,d,h;i<=k;i++)
            scanf("%d%d%d%d%d",&a,&b,&c,&d,&h);
            g[a].push_back(b,++cnt);
            g[c].push_back(d,++cnt);
            to[cnt-1]=cnt,-h;// 建边
        
        g[n].push_back(m,++cnt);
        for(int i=1;i<=cnt;i++)
            dp[i]=INF;
        
        dp[1]=0;
        for(int i=1;i<=n;i++)
            sort(g[i].begin(),g[i].end());
            int sz=g[i].size();
            for(int j=1;j<sz;j++)
                dp[g[i][j].se]=min(dp[g[i][j].se],dp[g[i][j-1].se]+x[i]*(g[i][j].fi-g[i][j-1].fi));
            
            for(int j=sz-2;j>=0;j--)
                dp[g[i][j].se]=min(dp[g[i][j].se],dp[g[i][j+1].se]+x[i]*(g[i][j+1].fi-g[i][j].fi));
            
            for(int j=0;j<sz;j++)
                dp[to[g[i][j].se].fi]=min(dp[to[g[i][j].se].fi],dp[g[i][j].se]+to[g[i][j].se].se);
            
        
        if(dp[cnt]>=1e18)
            printf("NO ESCAPE\\n");
        else
            printf("%lld\\n",dp[cnt]);
        
    
    return 0;

// 3 1 3 2



不摆烂了,写题

以上是关于E. Not Escaping 题解(dp)的主要内容,如果未能解决你的问题,请参考以下文章

E. Another Filling the Grid 状压dp

Codeforces 900 E. Maximum Questions (DP,技巧)

E. The Values You Can Make 背包,同时DP

codeforces 797 E. Array Queriesdp,暴力

线段树or优先队列+dp E. Lunar New Year and Red Envelopes

Codeforces Round #384 (Div. 2) E. Vladik and cards 状压dp