亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

sgu148 B-station(Bomb)

2019-11-14 11:08:58
字體:
來源:轉載
供稿:網友

題目

        在離著名的國家Berland不遠的地方,有一個水下工作站。這個工作站有N層。已知:是第層裝有Wi的水,最多可以容納Li的水,恐怖分子炸毀第i的代價是Pi。第i層一旦被炸毀,該層所有的水都將傾瀉到第i+1層。如果某一層的水量超過了它的容量(即Li),那么該層就將自動被毀壞,所有的水也會傾瀉到下一層。

        Pivland的恐怖分子想要用最少的錢毀掉第N層,現在他雇傭你來計算,需要炸毀哪些層。

 

 

輸入

 

      第一行有一個自然數N(1<=n<=15000)。接下來的N行,每行3個整數Wi, Li, Pi(0<=Wi,Li,Pi<=15000)。

 

輸出

 

     輸出需要炸毀的層的編號。

Solution1:小根堆+枚舉。

從下往上推的話,f[i]是從i層開始炸毀的代價如果炸毀i-1,且s[i]-s[i-2]>l[i],那么從第i-1層開始炸毀的代價是f[i]+c[i-1]-c[i]; 從第k層開始炸毀時只要將第i(k<i<=n)層里(s[i]-s[k-1]>l[i]) 層里之前算作炸毀的層的c[i]減去,并標記沒被炸毀.用優先隊列優化的話將快很多,只要將當前炸毀的層入隊,當滿足s[i]-s[k-1]>l[i]時,出隊并減去c[i];

#include <cstdio>  #include <queue>  #include <utility>  using namespace std;  typedef pair<int,int> aii;const int maxx = 15000+10, INF = 2e9;  PRiority_queue< aii > heap;int n;int ans = INF,flag = 0,sum = 0,Sum = 0; int v[maxx],s[maxx],c[maxx];int pre[maxx];bool hash[maxx];int main()   {  //	freopen("Bstation.in","r",stdin);//	freopen("Bstation.out","w",stdout);	    scanf("%d",&n);      	for(int i=n;i>=1;i--)       {          scanf("%d%d%d",&s[i],&v[i],&c[i]);            pre[i] = pre[i+1]+s[i];      }       	for(int i=1;i<=n;i++)      {          for(;!heap.empty() && heap.top().first>pre[i+1]; heap.pop())              sum -= heap.top().second;        heap.push(make_pair(pre[i]-v[i], c[i]));          sum+=c[i];          if(ans>sum)          {              ans = sum;              flag = i;             }      }        	for(int i=flag;i>=1;i--)      {          Sum += s[i];        if(Sum>v[i])              hash[i] = true;       }          for(int i=flag;i>=1;i--)          if(!hash[i])              printf("%d/n", n-i+1);      return 0;  }Solution2:類似二分查找的算法。

之前做過B-station,是用堆的方法。奈何考場碰到此題時早已把此方法忘得一干二凈/捂臉。所以迫不得已,強行自己創造了

一個類似二分查找的方法來通過此題防止爆零…咳咳咳,這個方法大致是這樣的。讀入時首先處理(由于本人個人習慣原因,把最高

層叫做第一層。要炸的叫最底層)之后用sum[i]表示重量的前綴和,用val[i]表示炸該層的費用。之后把每層放入結構體。關鍵字:

d,l,w,id,need(need保存的是壓毀此層時至少毀掉的最高層。換句話說,設i層的need為need[i],只要從need[i]到i-1之間

所有層都已毀壞,第i層就會直接被壓毀。而這個need怎么求呢?假設第i層的need[i]為T,則有sum[i]-sum[T-1]>l[i]。經變形得

到sum[T-1]<sum[i]-l[i]。這時候,因為sum單調遞增,可知sum[T]>=sum[i]-l[i]。所以可以用lower_bound函數直接找出

need[i]。接下來我們要做的是將結構體依照need進行排序。然后創建一個vector<int> sale[]的數組。sale[i]中存以此層作為最

高層時可以壓毀的層的編號。之后就直接自底往上開始枚舉最高層。每次枚舉時首先tmp += val[i](都考慮直接炸掉),之后在

sale[i]中進行查找,如果有編號在i層和底層之間,也就是sale[i][j]>i,則tmp-=val[sale[i][j]]。(說明以i為最高層時此層不用

炸)。每次枚舉過后比較tmp與Ans。最終就能得到答案。//考試時做了幾個小時,生無可戀.jpg。

#include <cstdio>#include <algorithm>#include <queue>#include <vector>using namespace std;const int maxx = 100000 + 100;struct Edge{    int id;    int d;    int l;    int w;    int need;}Edges[maxx];long long sum[maxx],val[maxx],cost[maxx];long long Ans = 1e9 + 100,tmp;int n;vector <int> sale[maxx];bool cmp(Edge a,Edge b){    if(a.need != b.need)    return a.need<b.need;    else    return a.id<b.id;}int main(){//    freopen("Bomb.in","r",stdin);//    freopen("Bomb.out","w",stdout);        scanf("%d",&n);        for(int i=n;i>=1;i--){        scanf("%d%d%d",&Edges[i].d,&Edges[i].w,&Edges[i].l);        val[i]=Edges[i].d;        Edges[i].id = i;    }        for(int i=1;i<=n;i++)        sum[i]=sum[i-1]+Edges[i].w;        for(int i=1;i<=n;i++){        int T = lower_bound(sum,sum+i,sum[i]-Edges[i].l)-sum;        if(T>0) Edges[i].need = T;        else Edges[i].need = 0;    }        sort(Edges+1,Edges+n+1,cmp);        for(int i=1;i<=n;i++)        sale[Edges[i].need].push_back(Edges[i].id);        for(int i=n;i>=1;i--){        tmp += val[i];        for(int j=0;j<sale[i].size();j++){            if(sale[i][j]>i)            tmp -= val[sale[i][j]];        }        Ans = min(Ans,tmp);    }    printf("%d",Ans);    return 0;}看來做過的題目還是要好好學懂啊QvQ。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品国产精品国自产在线| 日韩精品视频在线| 在线视频中文亚洲| 亚洲91精品在线| 国产日韩综合一区二区性色av| 91精品久久久久久综合乱菊| 中文字幕亚洲欧美日韩2019| 丰满岳妇乱一区二区三区| 这里精品视频免费| 欧洲美女7788成人免费视频| 色综久久综合桃花网| 91在线网站视频| 欧美日韩另类视频| 久久亚洲私人国产精品va| 亚洲天堂av电影| 欧美日韩国产成人在线| 国产精自产拍久久久久久| 精品高清美女精品国产区| 欧美俄罗斯乱妇| 亚洲人成网站色ww在线| 久久69精品久久久久久国产越南| 亚洲天堂av女优| 欧美专区在线播放| 国产91在线播放精品91| 亚洲欧洲国产精品| 亚洲人成啪啪网站| 日韩欧美中文在线| 精品国产一区二区三区久久狼黑人| 日韩免费观看在线观看| 欧美日韩国产一区二区| 日韩电影中文字幕在线| 国产午夜一区二区| 欧美乱大交做爰xxxⅹ性3| 国产精品一区二区三区久久| 欧美亚洲视频在线观看| 久久精品久久久久电影| 亚洲色图激情小说| 亚洲aaaaaa| 国产激情综合五月久久| 久久精品小视频| 亚洲天堂日韩电影| 日韩欧美在线国产| 国产成人综合av| 色婷婷综合成人av| 日韩av在线网址| 久久久欧美一区二区| 国产精品88a∨| 国产九九精品视频| 最近2019中文免费高清视频观看www99| 国产成人精品日本亚洲| 麻豆一区二区在线观看| 国产精品吹潮在线观看| 日韩黄色av网站| 日本精品va在线观看| 欧美成aaa人片免费看| 日本在线观看天堂男亚洲| 欧美激情视频一区二区| 日韩精品高清视频| 夜夜嗨av色一区二区不卡| 久久久久久久久网站| 欧美日韩免费看| 精品欧美国产一区二区三区| 国产性猛交xxxx免费看久久| 北条麻妃久久精品| 欧美www视频在线观看| 国产成人精品久久二区二区| 成人做爰www免费看视频网站| 欧美xxxx18性欧美| 国内揄拍国内精品少妇国语| 亚洲美腿欧美激情另类| 欧美裸体xxxx极品少妇| 亚洲午夜久久久久久久| 久久免费观看视频| 岛国av一区二区| 色偷偷888欧美精品久久久| 中文字幕日本欧美| 国产一区二区三区在线观看网站| 伊人伊成久久人综合网小说| 亚洲精品自拍第一页| 日本中文字幕久久看| 国产精品久久久久久亚洲影视| 欧美激情喷水视频| 亚洲国产日韩欧美综合久久| 亚洲电影免费观看高清完整版| 国产精品视频区| 97成人超碰免| 久久精品亚洲一区| 亚洲精品自拍视频| 久久久久久国产免费| 国产精品一区二区三区免费视频| 国产色婷婷国产综合在线理论片a| 日韩在线观看av| 欧美丝袜一区二区三区| 国产精品久久久久久久一区探花| 久久中文字幕国产| 亚洲久久久久久久久久| 日韩不卡在线观看| 欧美日韩福利电影| 亚洲片在线资源| 精品久久久在线观看| 国产九九精品视频| 久久伊人免费视频| 4p变态网欧美系列| 91在线播放国产| www.xxxx精品| 亚洲在线观看视频网站| 亚洲国产成人久久综合| www亚洲精品| 日韩在线视频免费观看高清中文| 久久亚洲精品小早川怜子66| 亚洲91av视频| 久久久久国色av免费观看性色| 久久久精品久久久| 一本大道久久加勒比香蕉| 欧美裸体视频网站| 成人欧美一区二区三区在线湿哒哒| 少妇高潮久久久久久潘金莲| 日韩av片电影专区| 久久久久久久97| 丝袜亚洲另类欧美重口| 一区二区亚洲精品国产| 亚洲第一区在线| 永久555www成人免费| 97精品视频在线| 国产精品一香蕉国产线看观看| 亚洲图片欧洲图片av| 97福利一区二区| 性日韩欧美在线视频| 亚洲理论片在线观看| 成人午夜一级二级三级| 日本欧美精品在线| 久久精品国产视频| 色青青草原桃花久久综合| 日韩午夜在线视频| 亚洲人成网在线播放| yw.139尤物在线精品视频| 51午夜精品视频| 精品一区二区三区四区在线| 不卡毛片在线看| 日本sm极度另类视频| 18一19gay欧美视频网站| 久久99久国产精品黄毛片入口| 国产精品久久97| 日韩经典第一页| 136fldh精品导航福利| 国产亚洲欧洲高清一区| 中文字幕亚洲欧美在线| 在线观看中文字幕亚洲| 97在线免费观看| 中文字幕亚洲欧美日韩在线不卡| 成人黄色免费网站在线观看| 日本视频久久久| 中文字幕不卡av| 欧美一二三视频| 精品久久久久久| 亚洲性猛交xxxxwww| 久久精品这里热有精品| 久久影视免费观看| 日韩av一区在线观看| 国产成人+综合亚洲+天堂| 91精品国产电影| 色老头一区二区三区在线观看| 国产精品成人播放| 国产成人精品一区二区三区|