• <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>

            SRM 146 DIV 2 1000

            Problem Statement

                

            A well-known riddle goes like this: Four people are crossing an old bridge. The bridge cannot hold more than two people at once. It is dark, so they can't walk without a flashlight, and they only have one flashlight! Furthermore, the time needed to cross the bridge varies among the people in the group. For instance, let's say that the people take 1, 2, 5 and 10 minutes to cross the bridge. When people walk together, they always walk at the speed of the slowest person. It is impossible to toss the flashlight across the bridge, so one person always has to go back with the flashlight to the others. What is the minimum amount of time needed to get all the people across the bridge?

            In this instance, the answer is 17. Person number 1 and 2 cross the bridge together, spending 2 minutes. Then person 1 goes back with the flashlight, spending an additional one minute. Then person 3 and 4 cross the bridge together, spending 10 minutes. Person 2 goes back with the flashlight (2 min), and person 1 and 2 cross the bridge together (2 min). This yields a total of 2+1+10+2+2 = 17 minutes spent.

            You want to create a computer program to help you solve new instances of this problem. Given an vector <int> times , where the elements represent the time each person spends on a crossing, your program should return the minimum possible amount of time spent crossing the bridge.

            Definition

                
            Class: BridgeCrossing
            Method: minTime
            Parameters: vector <int>
            Returns: int
            Method signature: int minTime(vector <int> times)
            (be sure your method is public)
                很有意思的一個題目,大概是說有n個人(1<=n<=6)要過一個獨(dú)木橋,獨(dú)木橋每次最多只能過2個人。過橋必須要燈籠,而且只有一盞燈籠。如果2個人一起過橋,所花時間由那個需要最長時間的人決定。問怎么過橋所需要的時間最短。
                由于題目的數(shù)據(jù)量不是很大,我直接用dfs搜了下所有的情況然后取最小的時間。貌似還有數(shù)學(xué)方法能很輕松的解決,不過還沒想到。
            #include <iostream>
            #include 
            <vector>
            using namespace std;

            class BridgeCrossing{
            public:
                
            int len,time,cross[6],best;
                
            void dfs(int n,bool flash,vector<int> times);
                
            int minTime(vector<int> times);
            }
            ;
            void BridgeCrossing::dfs(int n, bool flash, vector<int> times){
                
            if(n==0){
                    best
            =(best>time)?time:best;
                    
            return;
                }

                
            if(flash){
                    
            for(int i=0;i<len;i++)
                        
            for(int j=i+1;j<len;j++)
                            
            if(cross[i] && cross[j]){
                                cross[i]
            =cross[j]=false;
                                time
            +=max(times[i],times[j]);
                                dfs(n
            -2,!flash,times);
                                time
            -=max(times[i],times[j]);
                                cross[i]
            =cross[j]=true;
                            }

                }

                
            else{
                    
            for(int i=0;i<len;i++)
                        
            if(!cross[i]){
                            cross[i]
            =true;
                            time
            +=times[i];
                            dfs(n
            +1,!flash,times);
                            time
            -=times[i];
                            cross[i]
            =false;
                        }

                }

            }

            int BridgeCrossing::minTime(vector<int> times){
                best
            =INT_MAX;
                len
            =times.size();
                time
            =0;
                
            for(int i=0;i<6;i++) cross[i]=true;
                
            if(len==1) best=times[0];
                
            else dfs(len,true,times);
                
            return best;
            }

            posted on 2009-05-27 00:59 極限定律 閱讀(655) 評論(1)  編輯 收藏 引用 所屬分類: TopCoder

            評論

            # re: SRM 146 DIV 2 1000 2010-03-05 11:05 3214668848

            在劉汝佳的《算法藝術(shù)與信息學(xué)競賽》上貪心算法練習(xí)題有這么一個題,應(yīng)該是貪心可以吧  回復(fù)  更多評論   

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(10)

            隨筆分類

            隨筆檔案

            友情鏈接

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久亚洲精品成人| 久久综合久久久| 久久人人爽人人爽人人片AV不 | 国产aⅴ激情无码久久| 久久综合久久自在自线精品自| www久久久天天com| 伊人久久一区二区三区无码| 青草国产精品久久久久久| 久久综合成人网| 精品久久久久久国产潘金莲| 久久男人AV资源网站| 久久久久久亚洲AV无码专区| 亚州日韩精品专区久久久| 2021少妇久久久久久久久久| 午夜精品久久影院蜜桃| 久久96国产精品久久久| 久久综合亚洲鲁鲁五月天| 久久伊人精品青青草原日本| 97久久香蕉国产线看观看| 国产精品美女久久福利网站| 久久被窝电影亚洲爽爽爽| 色婷婷综合久久久久中文| 久久国内免费视频| 久久久久亚洲AV无码专区网站| 久久99国产精品99久久| 久久久老熟女一区二区三区| 日本精品久久久久影院日本| 国内精品久久久久久久亚洲| 粉嫩小泬无遮挡久久久久久| 久久丫忘忧草产品| 久久久久av无码免费网| 午夜视频久久久久一区 | 久久久久无码专区亚洲av| avtt天堂网久久精品| 精品人妻久久久久久888| 色8久久人人97超碰香蕉987| 狠狠色婷婷久久综合频道日韩| 久久午夜无码鲁丝片秋霞| 伊人久久大香线蕉av一区| 久久亚洲中文字幕精品有坂深雪| 亚洲人成伊人成综合网久久久|