1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          BZOJ2259 [Oibh]新型計算機 題解

          來源:互聯網轉載 時間:2024-01-29 07:54:00

          題目傳送門

          提供兩種做法

          1.Dijstra最短路

          正常連邊后,對于每個位置 \(i\) 都加上 \(i-1->i\) 和 \(i->i+1\) ,長度為 \(1\) 的邊,相當于先按照原方法走再改動。

          不過題目中要求改動后的數必須是自然數(也就是正整數),所以不是所有點都可以加,必須逐個判斷能否改動。

          然后跑一個堆優化Dijkstra即可。

          $Code\ by\ $ @wsy_jim

          %%%

          #include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cmath>#include<vector>#include<map>#include<queue>#include<deque>#include<set>#include<stack>#include<bitset>#include<cstring>#define ll long long#define pii pair<int,int>using namespace std;const int INF=0x3f3f3f3f,N=1000010;int e[4*N],ne[4*N],idx,h[N],w[4*N],n,ls[N],rs[N];inline int read(){    int x=0,y=1;char c=getchar();    while (c<'0'||c>'9') {if (c=='-') y=-1;c=getchar();}    while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();    return x*y;}void add(int a,int b,int c){    e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;}namespace dijkstra{    int dist[N];    bool vis[N];    int dijkstra(int st,int ed){        memset(dist,0x3f,sizeof dist);        priority_queue<pii,vector<pii>,greater<pii> > q;        dist[st]=0;        q.push(make_pair(0,st));        while(q.size()){            pii op=q.top();            q.pop();            int dis=op.first,ver=op.second;            if(vis[ver]) continue;            vis[ver]=1;            for(int i=h[ver];~i;i=ne[i]){                int j=e[i];                if(dist[j]>dist[ver]+w[i]){                    dist[j]=dist[ver]+w[i];                    q.push(make_pair(dist[j],j));                }             }        }        if(dist[ed]==0x3f) return -1;        return dist[ed];    }}int main(){    memset(h,-1,sizeof h);    n=read();    for(int i=1,k;i<=n;i++){        k=read();        if(i+k<=n) add(i,i+k+1,0);        else add(i,n+1,i+k-n);        for(int j=i+1;j<=i+k+1&&j<=n&&!ls[j];j++)ls[j]=1,add(j,j-1,1);for(int j=i+k+1;j<=n&&!rs[j];j++)rs[j]=1,add(j,j+1,1);    }    // for(int i=1;i<=n;i++){    //     for(int j=h[i];~j;j=ne[j]) printf("%d %d  ",e[j],w[j]);    //     printf("\n");    // }    ll ans=dijkstra::dijkstra(1,n+1);    printf("%lld\n",ans);        return 0;}

          2.樹狀數組維護DP

          設 \(f[i]\) 表示處理 \(i\) 到 \(n\) 的最優答案。
          易得

          \[f[i] = min ( f[j] + abs(j - i - 1 - a[i]) )\ \ \ (i<j<n)\]

          把這個式子打開

          \[f[i] = min(f[j]+j)-(i+1+a[i]) (j ≥ a[i]+i+1)\]\[f[i] = min(f[j]-j)+(i+1+a[i]) (j<a[i]+i+1)\]

          然后用樹狀數組維護 \(f[j]+j\) 和 \(f[j]-j\) 即可

          \(Code\)

          #include<algorithm>#include<bitset>#include<cctype>#include<cerrno>#include<clocale>#include<cmath>#include<complex>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<deque>#include<exception>#include<fstream>#include<functional>#include<limits>#include<list>#include<map>#include<iomanip>#include<ios>#include<iosfwd>#include<iostream>#include<istream>#include<ostream>#include<queue>#include<set>#include<sstream>#include<stack>#include<stdexcept>#include<streambuf>#include<string>#include<utility>#include<vector>#include<cwchar>#include<cwctype>#include<chrono>#include<random>#include<unordered_map>using namespace std;#define ll long long#define ull unsigned long long#define rll register long long#define ri register int#define il inline//#define int long longconst int INF=0x3f3f3f3f,N=1e6+10;int n,t;int ins[N];int f[N];int t1[N],t2[N];il ll read(){    ll x=0,y=1;    char c=getchar();    while(c<'0'||c>'9'){        if(c=='-')            y=-1;        c=getchar();    }    while(c>='0'&&c<='9'){        x=x*10+c-'0';        c=getchar();    }    return x*y;}il int lowbit(int x){    return x&(-x);}il int query1(int x){    int mid=INF;    x=(n+1)-x;    if(x>n||x<=0)        return mid;    while(x){        mid=min(mid,t1[x]);        x-=lowbit(x);    }    return mid;}il int query2(int x){    int mid=INF;    if(x>n||x<=0)        return mid;    while(x){        mid=min(mid,t1[x]);        x-=lowbit(x);    }    return mid;}il void wh(int x){    int mid=x;    while(mid<=n){        t2[mid]=min(t2[mid],f[x]-x);        mid+=lowbit(mid);    }    mid=(n+1)-x;    while(mid<=n){        t1[mid]=min(t1[mid],f[x]+x);        mid+=lowbit(mid);    }}signed main(){    n=read();    memset(t1,0x3f,sizeof(t1));    for(ri i=1;i<=n;i++)        ins[i]=read();    for(ri i=n;i>=1;i--){        f[i]=abs(n-i-ins[i]);        t=ins[i]+i+1;        if(t<n)            f[i]=min(f[i],query1(t)-t);        f[i]=min(f[i],query2(t)+t);        wh(i);    }    printf("%d",f[1]);    return 0;}
          標簽:oibh-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          QQ如何設置動態壁紙?聊q主菜單設置頁背景步驟::1、再點手機桌面圖標正常啟動軟件啊客服端。2、點擊上主菜單上的個人空間頭像,在直接出現的下拉菜單中再點“個性造型”。3、從自己的相冊中本地上傳動態百度圖片。4、再點“從我的相冊選擇背景設置”選項。5、在相冊文件夾中可以找到你要本地上傳的原圖并再點。6、用大拇指和食指在頻幕上劃動,移動手機和縮放比例圖片到理想什么狀態,最后直接點擊“能夠完成”,隨機打...

          石家莊裝修建材市場有哪些?1.巨然李佳裝飾城(巨然李佳裝飾城位于石家莊市中華南街473號)2.西三莊建材市場(位于北二環與西三莊街交叉口)3.紅星美凱龍(建華街與和平路交叉口)4.好家園(東二環與和平路交叉口)5.岳明家園(淮安路高架橋以西)6.白色家居(體育街與東港路交叉口)7.陽光宜家建材廣場(和平東路430號)8.紅房子裝飾材料市場(槐中路與建設街交叉口)9.華業裝飾城(新華西路)10.岳明...

          iPhone手機版微信一直顯示在收取中解決辦法?進入并將常規后臺應用程序設置為刷新并打開。關掉不用的,打開微信解決蘋果6的問題。微信收藏出現問題的可能原因如下:WiFi本身問題,WiFi可能連接不好,導致無法上網;路由器問題,路由器可能過熱或損壞;寬帶欠費,導致無法上網;WiFi名稱中含有中文,導致部分手機無法上網;手機系統出現問題,系統可能出現問題,導致無法上網連接WiFi,但無法上網。如何解決...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>