青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

QuXiao

每天進(jìn)步一點(diǎn)點(diǎn)!

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  50 隨筆 :: 0 文章 :: 27 評(píng)論 :: 0 Trackbacks
題目來(lái)源:

PKU 1018 Communication System

 

算法分類:

枚舉+貪心

 

原文:

Communication System

Time Limit:1000MS  Memory Limit:10000K

Description

We have received an order from Pizoor Communications Inc. for a special communication system. The system consists of several devices. For each device, we are free to choose from several manufacturers. Same devices from two manufacturers differ in their maximum bandwidths and prices.
By overall bandwidth (B) we mean the minimum of the bandwidths of the chosen devices in the communication system and the total price (P) is the sum of the prices of all chosen devices. Our goal is to choose a manufacturer for each device to maximize B/P.

Input

The first line of the input file contains a single integer t (1 ≤ t ≤ 10), the number of test cases, followed by the input data for each test case. Each test case starts with a line containing a single integer n (1 ≤ n ≤ 100), the number of devices in the communication system, followed by n lines in the following format: the i-th line (1 ≤ i ≤ n) starts with mi (1 ≤ mi ≤ 100), the number of manufacturers for the i-th device, followed by mi pairs of positive integers in the same line, each indicating the bandwidth and the price of the device respectively, corresponding to a manufacturer.

Output

Your program should produce a single line for each test case containing a single number which is the maximum possible B/P for the test case. Round the numbers in the output to 3 digits after decimal point.

Sample Input

1 3

3 100 25 150 35 80 25

2 120 80 155 40

2 100 100 120 110

 

Sample Output

0.649

 

Source

Tehran 2002, First Iran Nationwide Internet Programming Contest

 

 

中文描述:

你需要購(gòu)買n種設(shè)備來(lái)組一個(gè)通信系統(tǒng),每一種設(shè)備,又是由一些不同的制造商生產(chǎn)的,不同制造商生產(chǎn)的同種設(shè)備會(huì)有不同的帶寬和價(jià)格。現(xiàn)在你要在每一個(gè)設(shè)備的制造商中選一個(gè),使得購(gòu)買的n種設(shè)備,它們帶寬的最小值與價(jià)格之和的比最大。

 

題目分析:

一開(kāi)始想到的就是暴搜,但是搜索的深度達(dá)到100,時(shí)間肯定是不允許的。想要解決這題,必須找到一個(gè)好的查找策略。再想想看這題的特點(diǎn),最后的答案,帶寬是選取所有設(shè)備中的最小值,而價(jià)格是選取所有設(shè)備的價(jià)格總和。如果某個(gè)制造商生產(chǎn)的某種設(shè)備,它的帶寬較高而價(jià)格較低,那么選取它的可能性就比較大。再進(jìn)一步說(shuō),如果所選取的n種設(shè)備的帶寬的最小值b已經(jīng)確定,那么對(duì)于某種設(shè)備,我們就可以在那些生產(chǎn)這種設(shè)備的,帶寬大于等于b的制造商中進(jìn)行選擇。當(dāng)然是選那個(gè)價(jià)格最低的設(shè)備,因?yàn)榇鸢傅姆肿右呀?jīng)確定為b,所以分母越小越好。看來(lái)只要枚舉b,再對(duì)于每個(gè)設(shè)備貪心的選擇最小價(jià)格就可以了,時(shí)間復(fù)雜度為OmnB),B為帶寬枚舉的數(shù)量。但問(wèn)題又來(lái)了,應(yīng)該怎么枚舉帶寬,題目中并未給出帶寬的取值范圍,如果從0..maxB一個(gè)一個(gè)枚舉的話,既費(fèi)時(shí)又會(huì)造成過(guò)多重復(fù)情況(如果枚舉那些在輸入中出現(xiàn)的兩個(gè)連續(xù)帶寬之間的值,最后的答案是一樣的)。所以我們應(yīng)該采取某個(gè)方法記錄輸入中出現(xiàn)過(guò)的帶寬(STL中的set是個(gè)不錯(cuò)的選擇),再枚舉這些帶寬。在枚舉中,可能出現(xiàn)這種情況:枚舉b,選擇了n種設(shè)備,但選擇的所有設(shè)備的帶寬都大于b,那么最終用b/price就不是這種情況的正確答案。其實(shí)不用擔(dān)心,因?yàn)檎_答案一定大于b/price。假設(shè)上面這種情況的實(shí)際帶寬最小值是b’,那個(gè)當(dāng)我們?cè)偃ッ杜eb’時(shí),至少有一個(gè)設(shè)備的帶寬等于b’,這次得到的答案也就是上面那種情況的答案,所以最終還是能得到正確解。

 

代碼:

#include <iostream>

#include <map>

#include <set>

#include <climits>

using namespace std;

 

const int MAX = 105;

 

struct Info

{

                int band, price;

};

 

struct Device

{

                int manuNum;

                Info info[MAX];

                map<int, int> minPrice;                 //map[i] = j 表示帶寬>=i的最小價(jià)格是j

                int minBand, maxBand;

};

 

Device device[MAX];

int deviceNum;

set<int> band;                                                                  //輸入中出現(xiàn)過(guò)的band

set<int>::iterator start, end;

int maxBand, minBand;                                 //需要枚舉的band的最值

 

int cmp( const void *a , const void *b )

{

                Info *c = (Info *)a;

                Info *d = (Info *)b;

                if(c->band != d->band)

                                return d->band - c->band;

                else

                                return c->price - d->price;

}

 

void Input ()

{

                int i, j, max, min;

                band.clear();

                cin>>deviceNum;

                for (i=0; i<deviceNum; i++)

                {

                                device[i].minBand = INT_MAX;

                                device[i].maxBand = -1;

                                cin>>device[i].manuNum;

                                for (j=0; j<device[i].manuNum; j++)

                                {

                                                cin>>device[i].info[j].band>>device[i].info[j].price;

                                                band.insert(device[i].info[j].band);

                                                if ( device[i].info[j].band > device[i].maxBand )

                                                                device[i].maxBand = device[i].info[j].band;

                                                if ( device[i].info[j].band < device[i].minBand )

                                                                device[i].minBand = device[i].info[j].band;

                                }

                                                               

                }

}

 

void Pre ()                                           //預(yù)處理

{

                int i, j, min, b;

                //計(jì)算所需枚舉的帶寬的最值

                maxBand = INT_MAX;                   //maxBand為所有設(shè)備帶寬最大值的最小值

                minBand = INT_MAX;                    //minBand為所有設(shè)備帶寬最小值的最小值

                for (i=0; i<deviceNum; i++)

                {

                                if ( device[i].maxBand < maxBand )

                                                maxBand = device[i].maxBand;

                                if ( device[i].minBand < minBand )

                                                minBand = device[i].minBand;

                }

 

                //對(duì)于每個(gè)設(shè)備,找到帶寬大于等于某一值的最小價(jià)格

                for (i=0; i<deviceNum; i++)

                {

                                //band從大到小,band相等時(shí)price從小到大

                                qsort(device[i].info, device[i].manuNum, sizeof(Info), cmp);

                                device[i].minPrice.clear();

                                min = device[i].info[0].price;

                                b = device[i].info[0].band;

                                device[i].minPrice[b] = min;

                                for (j=1; j<device[i].manuNum; j++)

                                {

                                                if ( device[i].info[j].band == b )

                                                                continue;

                                                if ( device[i].info[j].price < min )

                                                {

                                                                min = device[i].info[j].price;

                                                }

                                                b = device[i].info[j].band;

                                                device[i].minPrice[b] = min;

                                }

                }             

}

 

void Solve ()

{

                Pre();

 

                int b, i, totalPrice;

                double rate, ans;

                map<int, int>::iterator it;

                ans = 0;

                start = band.find(minBand);

                end = band.find(maxBand);

                end ++;

                while ( start != end )

                {

                                b = *start;

                                start ++;

                                totalPrice = 0;

                                for (i=0; i<deviceNum; i++)

                                {

                                                //找到帶寬大于等于b的最小價(jià)格

                                                for (it=device[i].minPrice.begin(); it!=device[i].minPrice.end(); it++)

                                                {

                                                                if ( it->first >= b )

                                                                {

                                                                                totalPrice += it->second;

                                                                                break;

                                                                }

                                                }

 

                                }

                                rate = double(b) / totalPrice;

                                if ( rate > ans )

                                                ans = rate;

                }

 

                printf("%.3f\n", ans);

}

 

int main ()

{

                int test;

                cin>>test;

                while ( test -- )

                {

                                Input ();

                                Solve ();

                }

 

                return 0;

}

posted on 2008-04-25 21:25 quxiao 閱讀(1563) 評(píng)論(6)  編輯 收藏 引用 所屬分類: ACM

評(píng)論

# re: PKU 1018 Communication System 2008-09-02 23:21 c迷2
寫得太好了,我把它轉(zhuǎn)到我的空間里面啦,你不會(huì)介意吧?  回復(fù)  更多評(píng)論
  

# re: PKU 1018 Communication System 2008-09-03 19:30 ACM-Boy
@c迷2
不介意,這里就是一個(gè)供大家一起思考、討論的平臺(tái),幫助了他人,也提高了自己。  回復(fù)  更多評(píng)論
  

# re: PKU 1018 Communication System 2009-01-18 10:50 zyq
這個(gè)程序?qū)懙牧_里羅嗦的!  回復(fù)  更多評(píng)論
  

# re: PKU 1018 Communication System 2009-03-13 15:51 CaBreak
寫的好,支持!  回復(fù)  更多評(píng)論
  

# re: PKU 1018 Communication System 2009-04-13 12:39 liuwuyue
受教了 呵呵 謝謝   回復(fù)  更多評(píng)論
  

# re: PKU 1018 Communication System 2009-07-01 16:27 chhaya
這么長(zhǎng)~~~  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲尤物在线视频观看| 久久久久久亚洲精品不卡4k岛国| 亚洲美女在线看| 国产精品草草| 久久躁狠狠躁夜夜爽| 欧美精品一区二区三区蜜桃| 欧美亚洲综合在线| 欧美日韩情趣电影| 欧美电影免费观看| 国产精品一二三视频| 亚洲黄色在线视频| 午夜亚洲一区| 亚洲精品影视| 久久精品女人天堂| 亚洲图片欧洲图片日韩av| 久久一区欧美| 久久精品国产精品| 欧美天天视频| 亚洲精品一区二区三区婷婷月 | 久久精品国产亚洲5555| 国内精品久久久久久影视8| av成人毛片| 一本在线高清不卡dvd| 你懂的视频一区二区| 久久女同互慰一区二区三区| 亚洲日本中文| 欧美精品午夜视频| 亚洲人体偷拍| 夜夜爽夜夜爽精品视频| 国产日韩欧美不卡| 亚洲欧美一区二区三区久久 | 亚洲影视综合| 亚洲国产精品嫩草影院| 午夜欧美不卡精品aaaaa| 亚洲高清不卡av| 亚洲精品美女免费| 国外成人在线视频网站| 久久久久中文| 亚洲国内自拍| 午夜宅男欧美| 一区二区黄色| 国产精品久久午夜夜伦鲁鲁| 亚洲欧美国产毛片在线| 久久精品卡一| 亚洲欧美在线视频观看| 国产亚洲第一区| 欧美色欧美亚洲另类二区| 蜜桃久久av一区| 亚洲人成人99网站| 欧美高清日韩| 欧美电影免费观看网站| 久久女同精品一区二区| 欧美主播一区二区三区| 在线观看亚洲精品视频| 欧美粗暴jizz性欧美20| 亚洲一区二区三区成人在线视频精品| 香蕉久久a毛片| 亚洲视频中文| 亚洲视频高清| 亚洲天堂久久| 亚洲综合99| 亚洲综合日韩在线| 亚洲资源在线观看| 亚洲一区二区三区午夜| 国模精品娜娜一二三区| 国产日韩欧美日韩| 国产日韩欧美在线观看| 国产日韩欧美在线| 国产综合久久久久影院| 国内精品一区二区| 曰韩精品一区二区| 亚洲国产成人av好男人在线观看| 在线日本成人| 国产精品久久久久99| 老司机aⅴ在线精品导航| 亚洲色无码播放| 久久午夜影视| 快射av在线播放一区| 亚洲在线中文字幕| 午夜在线观看欧美| 久久精品亚洲一区二区| 亚洲欧洲日韩女同| 国产一区在线播放| 又紧又大又爽精品一区二区| 曰韩精品一区二区| 日韩一区二区电影网| 国产视频亚洲精品| 揄拍成人国产精品视频| 亚洲精品视频免费在线观看| av成人天堂| 久久精品国亚洲| 欧美成ee人免费视频| 久久精品官网| 欧美顶级大胆免费视频| 日韩视频在线你懂得| 亚洲一区免费| 麻豆av一区二区三区久久| 欧美日韩dvd在线观看| 牛牛影视久久网| 欧美日韩一区三区四区| 国产日韩一区| 日韩天堂av| 久久黄色影院| 欧美高清视频| 亚洲欧美成人网| 欧美福利视频一区| 久久影视精品| 国产精品久久一级| 亚洲国产精品成人综合| 日韩天堂av| 久久一区二区三区国产精品| 亚洲精品一区中文| 久久精品国产清高在天天线| 亚洲一区欧美一区| 欧美福利电影网| 韩国成人理伦片免费播放| 亚洲精品综合久久中文字幕| 久久av老司机精品网站导航| 欧美激情片在线观看| 亚洲高清久久| 欧美一区二区三区的| 久久精品九九| 国产精品久久久久aaaa九色| 136国产福利精品导航| 亚洲欧美成人一区二区在线电影| 小处雏高清一区二区三区| 欧美国产综合一区二区| 午夜精品福利在线| 欧美三级黄美女| 亚洲国产欧美一区二区三区同亚洲| 亚洲激情亚洲| 久久视频一区| 亚洲一二三区精品| 久久精品卡一| 国产乱肥老妇国产一区二| 日韩亚洲精品视频| 欧美韩国在线| 久久久人成影片一区二区三区| 国产精品一二三四| 亚洲欧美第一页| 99国产精品久久久久久久成人热| 美女精品自拍一二三四| 激情亚洲成人| 一区二区日韩欧美| 亚洲国产成人tv| 美女主播精品视频一二三四| 一区二区三区无毛| 久久网站热最新地址| 亚洲欧美亚洲| 国产亚洲精品一区二区| 亚洲精品国产精品乱码不99| 美国成人直播| 在线一区二区三区做爰视频网站| 欧美国产日韩一二三区| 亚洲欧洲一区二区三区久久| 另类亚洲自拍| 久久综合电影一区| 亚洲欧洲一二三| 亚洲国产清纯| 欧美日韩国产成人| 亚洲自拍偷拍福利| 亚洲一级黄色片| 国产视频久久久久久久| 久久精品av麻豆的观看方式| 欧美一区二区视频免费观看| 国内精品久久久久影院薰衣草| 久久久久九九九| 美日韩精品视频免费看| 亚洲大片在线| 亚洲精品社区| 国产精品免费一区二区三区在线观看| 亚洲欧美国产精品专区久久| 亚洲欧美日韩国产另类专区| 国产三区精品| 欧美激情精品久久久六区热门| 欧美精品 日韩| 亚洲欧美在线视频观看| 欧美中文日韩| 国产区二精品视| 亚洲欧美日韩天堂| 午夜精品久久一牛影视| 精品99一区二区| 亚洲国产一区二区三区a毛片 | 欧美性一二三区| 欧美一区二区三区久久精品 | 欧美精品久久久久久| 亚洲一二三区在线| 先锋影音网一区二区| 亚洲成人在线视频播放| 日韩一级精品| 国外成人免费视频| 亚洲日本一区二区三区| 国产精品美女一区二区在线观看| 久久免费视频在线观看| 欧美激情视频一区二区三区不卡| 亚洲在线观看视频网站| 久久久久久夜精品精品免费| 一本综合久久| 久久精品伊人| 亚洲欧美另类久久久精品2019|