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

            zoj3620

            Escape Time II

            Time Limit: 2 Seconds      Memory Limit: 65536 KB

            There is a fire in LTR ’ s home again. The fire can destroy all the things in t seconds, so LTR has to escape in t seconds. But there are some jewels in LTR ’ s rooms, LTR love jewels very much so he wants to take his jewels as many as possible before he goes to the exit. Assume that the ith room has ji jewels. At the beginning LTR is in room s, and the exit is in room e.

            Your job is to find a way that LTR can go to the exit in time and take his jewels as many as possible.

            Input

            There are multiple test cases.
            For each test case:
            The 1st line contains 3 integers n (2 ≤ n ≤ 10), m, t (1 ≤ t ≤ 1000000) indicating the number of rooms, the number of edges between rooms and the escape time.
            The 2nd line contains 2 integers s and e, indicating the starting room and the exit.
            The 3rd line contains n integers, the ith interger ji (1 ≤ ji ≤ 1000000) indicating the number of jewels in the ith room.
            The next m lines, every line contains 3 integers a, b, c, indicating that there is a way between room a and room b and it will take c (1 ≤ ct) seconds.

            Output

            For each test cases, you should print one line contains one integer the maximum number of jewels that LTR can take. If LTR can not reach the exit in time then output 0 instead.

            Sample Input

            3 3 5 0 2 10 10 10 0 1 1  0 2 2 1 2 3 5 7 9 0 3 10 20 20 30 20 0 1 2 1 3 5 0 3 3 2 3 2 1 2 5 1 4 4 3 4 2

            Sample Output

            30 80

            Author: FU, Yujun
            Contest: ZOJ Monthly, June 2012

            狀態搜索,
            搜索寫了不少,但是以前幾乎沒寫過這一類的題目,
            要開始練搜索啊

            code
            #include <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <ctime>
            #include 
            <cassert>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <fstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <iomanip>
            #define maxn 15
            #define inf 1000000000
            using namespace std;
            int mp[maxn][maxn];
            int t,n,m,s,e,ti,x,y;
            int a[maxn];
            long long ans;
            struct node
            {
                
            int v,st,val,ti;
            } tmp,tmp1;
            queue
            <node> q;
            int head,tail;
            int get[15][1024];
            int mt[15][1024];
            int max(int a,int b)
            {
                
            return a>b?a:b;
            }
            int main()
            {
                
            int res;
                
            while(scanf("%d%d%d",&n,&m,&t)!=EOF)
                {
                    scanf(
            "%d%d",&s,&e);
                    
            for(int i=0; i<n; i++) scanf("%d",&a[i]);
                    
            for(int i=0; i<n; i++)
                    {
                        
            for(int j=i+1; j<n; j++)
                            mp[i][j]
            =mp[j][i]=inf;
                    }
                    
            for(int i=1; i<=m; i++)
                    {
                        scanf(
            "%d%d%d",&x,&y,&ti);
                        
            if(ti<mp[x][y])
                        {
                            mp[x][y]
            =ti;
                            mp[y][x]
            =ti;
                        }
                    }
                    memset(
            get,0,sizeof(get));//這地方老是順手寫成sizeof(0)
                    for(int i=0; i<n; i++)
                    {
                        
            for(int j=0; j<(1<<n); j++)
                        {
                            mt[i][j]
            =inf;
                        }
                    }
                    
            get[s][1<<s]=a[s];
                    mt[s][
            1<<s]=0;
                    res
            =0;
                    tmp.v
            =s;
                    tmp.ti
            =0;
                    tmp.val
            =a[s];
                    tmp.st
            =1<<s;
                    q.push(tmp);
                    
            while(!q.empty())
                    {
                        tmp
            =q.front();
                        q.pop();
                        
            for(int i=0; i<n; i++)
                        {
                            
            if(i==tmp.v) continue;
                            
            if(mp[tmp.v][i]+tmp.ti<=t)
                            {
                                tmp1.val
            =tmp.val;
                                tmp1.st
            =tmp.st;
                                
            if(!((tmp1.st>>i)&1))
                                {
                                    tmp1.st
            =tmp1.st|(1<<i);
                                    tmp1.val
            +=a[i];
                                }
                                
            if(tmp1.val>get[i][tmp1.st]||(tmp1.val==get[i][tmp1.st]&&tmp.ti+mp[tmp.v][i]<mt[i][tmp1.st]))
                                {
                                    
            get[i][tmp1.st]=tmp1.val;
                                    mt[i][tmp1.st]
            =tmp.ti+mp[tmp.v][i];
                                    tmp1.ti
            =mt[i][tmp1.st];
                                    tmp1.v
            =i;
                                    q.push(tmp1);
                                }
                            }
                        }
                    }
                    
            for(int i=0; i<(1<<n); i++)
                        res
            =max(get[e][i],res);
                    printf(
            "%d\n",res);
                }
                
            return 0;
            }

            posted on 2012-07-30 21:51 jh818012 閱讀(96) 評論(0)  編輯 收藏 引用

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

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內容較長,點擊標題查看
            • --王私江
            久久婷婷五月综合97色直播| 久久久受www免费人成| 国内精品人妻无码久久久影院| 亚洲精品tv久久久久久久久| 久久精品九九亚洲精品天堂 | 2022年国产精品久久久久| 亚洲国产成人久久综合一| 精品久久久久久久久免费影院| 久久精品国产亚洲AV高清热| 人妻精品久久久久中文字幕| 久久久久成人精品无码中文字幕| 久久播电影网| 久久久久四虎国产精品| 久久受www免费人成_看片中文| 国产精品久久久久久影院| 亚洲综合熟女久久久30p| 国产精品免费久久久久久久久| 麻豆AV一区二区三区久久| 久久久久亚洲av成人无码电影 | 亚洲日本va中文字幕久久| 久久成人国产精品一区二区| 久久w5ww成w人免费| 久久精品一本到99热免费| 青草久久久国产线免观| 久久www免费人成看国产片 | 久久久久久av无码免费看大片| .精品久久久麻豆国产精品| 久久久久无码精品国产不卡| 亚洲国产精品久久久天堂| 国产A三级久久精品| 国产激情久久久久久熟女老人 | 一本大道久久东京热无码AV| 久久久WWW成人| 亚洲国产精品狼友中文久久久| 久久www免费人成看国产片 | AV无码久久久久不卡蜜桃| 97香蕉久久夜色精品国产| 精品久久久无码21p发布| 无码人妻久久一区二区三区 | 亚洲国产精品无码久久一区二区| 狠狠色婷婷久久综合频道日韩 |